Документация Python неофициальный перевод

stdtypes.md

1748 строк · 182.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/library/stdtypes.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 5. Встроенные типы89В следующих разделах описываются стандартные типы, встроенные в интерпретатор.1011> **Примечание**12>13> Исторически (до выхода версии 2.2) встроенные типы Python отличались от пользовательских типов, поскольку их нельзя было использовать в качестве основы для объектно-ориентированного наследования. Теперь этого ограничения больше нет.1415Основные встроенные типы – это числа, последовательности, отображения, файлы, классы, экземпляры и исключения.1617Некоторые операции поддерживаются несколькими типами объектов; в частности, практически все объекты можно сравнивать, проверять на истинность и преобразовывать в строку (с помощью функции [repr()](https://python-all.ru/2.7/library/functions.html#func-repr) или несколько отличающейся функции [`str()`](https://python-all.ru/2.7/library/functions.html#str)). Последняя функция неявно используется, когда объект выводится функцией [`print()`](https://python-all.ru/2.7/library/functions.html#print).1819## 5.1. Проверка истинности2021Любой объект может быть проверен на истинность для использования в условии [`if`](https://python-all.ru/2.7/reference/compound_stmts.html#if) или [`while`](https://python-all.ru/2.7/reference/compound_stmts.html#while), а также в качестве операнда булевых операций ниже. Следующие значения считаются ложными:2223>2425- `None`26- `False`27- ноль любого числового типа, например, `0`, `0L`, `0.0`, `0j`.28- любая пустая последовательность, например, `''`, `()`, `[]`.29- любое пустое отображение, например, `{}`.30- экземпляры пользовательских классов, если класс определяет метод [`__nonzero__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__nonzero__) или [`__len__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__len__), и этот метод возвращает целый ноль или значение [`bool`](https://python-all.ru/2.7/library/functions.html#bool) `False`. [1](https://python-all.ru/2.7/library/stdtypes.html#id12)3132Все остальные значения считаются истинными – поэтому объекты многих типов всегда истинны.3334Операции и встроенные функции, возвращающие булев результат, всегда возвращают `0` или `False` для ложного и `1` или `True` для истинного, если не указано иное. (Важное исключение: булевы операции `or` и `and` всегда возвращают один из своих операндов.)3536## 5.2. Булевы операции – [`and`](https://python-all.ru/2.7/reference/expressions.html#and), [`or`](https://python-all.ru/2.7/reference/expressions.html#or), [`not`](https://python-all.ru/2.7/reference/expressions.html#not)3738Это булевы операции в порядке возрастания приоритета:3940| Операция | Результат | Примечания |41| --- | --- | --- |42| `x or y` | если *x* ложно, то *y*, иначе *x* | (1) |43| `x and y` | если *x* ложно, то *x*, иначе *y* | (2) |44| `not x` | если *x* ложно, то `True`, иначе `False` | (3) |4546Примечания:47481. Это оператор с сокращённым вычислением: второй аргумент вычисляется, только если первый ложен.492. Это оператор с сокращённым вычислением: второй аргумент вычисляется, только если первый истинен.503. `not` имеет более низкий приоритет, чем небулевы операторы, поэтому `not a == b` интерпретируется как `not (a == b)`, а `a == not b` является синтаксической ошибкой.5152## 5.3. Сравнения5354Операции сравнения поддерживаются всеми объектами. Все они имеют одинаковый приоритет (который выше, чем у логических операций). Сравнения можно произвольно объединять в цепочки; например, `x < y <= z` эквивалентно `x < y and y <= z`, за исключением того, что *y* вычисляется только один раз (но в обоих случаях *z* не вычисляется вообще, если `x < y` оказывается ложным).5556В этой таблице приведены операции сравнения:5758| Операция | Значение | Примечания |59| --- | --- | --- |60| `<` | строго меньше |  |61| `<=` | меньше или равно |  |62| `>` | строго больше |  |63| `>=` | больше или равно |  |64| `==` | равно |  |65| `!=` | не равно | (1) |66| `is` | идентичность объектов |  |67| `is not` | отрицание идентичности объектов |  |6869Примечания:70711. `!=` можно также записать как `<>`, но это устаревшее использование, сохранённое только для обратной совместимости. В новом коде всегда следует использовать `!=`.7273Объекты разных типов, за исключением разных числовых типов и разных строковых типов, никогда не сравниваются как равные; такие объекты упорядочиваются последовательно, но произвольно (таким образом, сортировка разнородного массива даёт согласованный результат). Кроме того, некоторые типы (например, файловые объекты) поддерживают лишь вырожденное понятие сравнения, при котором любые два объекта этого типа неравны. Опять же, такие объекты упорядочиваются произвольно, но последовательно. Операторы `<`, `<=`, `>` и `>=` вызовут исключение [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError), если любой операнд является комплексным числом.7475Неидентичные экземпляры класса обычно сравниваются как неравные, если только класс не определяет метод [`__eq__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__eq__) или метод [`__cmp__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__cmp__).7677Экземпляры класса нельзя упорядочить по отношению к другим экземплярам того же класса или объектам других типов, если только класс не определяет достаточное количество методов расширенного сравнения ([`__lt__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__lt__), [`__le__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__le__), [`__gt__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__gt__) и [`__ge__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__ge__)) или метод [`__cmp__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__cmp__).7879**Особенности реализации CPython:** Объекты разных типов, кроме чисел, упорядочиваются по именам своих типов; объекты одного типа, которые не поддерживают надлежащего сравнения, упорядочиваются по своему адресу.8081Ещё две операции с тем же синтаксическим приоритетом, `in` и `not in`, поддерживаются только типами последовательностей (см. ниже).8283## 5.4. Числовые типы – [`int`](https://python-all.ru/2.7/library/functions.html#int), [`float`](https://python-all.ru/2.7/library/functions.html#float), [`long`](https://python-all.ru/2.7/library/functions.html#long), [`complex`](https://python-all.ru/2.7/library/functions.html#complex)8485Существует четыре различных числовых типа: *обычные целые числа*, *длинные целые числа*, *числа с плавающей точкой* и *комплексные числа*. Кроме того, логические значения являются подтипом обычных целых чисел. Обычные целые числа (также называемые *целыми числами*) реализованы с использованием `long` в C, что даёт им точность не менее 32 бит (`sys.maxint` всегда установлено в максимальное значение обычного целого для текущей платформы, минимальное значение – `-sys.maxint - 1`). Длинные целые числа имеют неограниченную точность. Числа с плавающей точкой обычно реализуются с помощью `double` в C; информация о точности и внутреннем представлении чисел с плавающей точкой для машины, на которой выполняется программа, доступна в [`sys.float_info`](https://python-all.ru/2.7/library/sys.html#sys.float_info). Комплексные числа имеют действительную и мнимую части, каждая из которых является числом с плавающей точкой. Чтобы извлечь эти части из комплексного числа *z*, используйте `z.real` и `z.imag`. (Стандартная библиотека включает дополнительные числовые типы: [`fractions`](https://python-all.ru/2.7/library/fractions.html#module-fractions), хранящие рациональные числа, и [`decimal`](https://python-all.ru/2.7/library/decimal.html#module-decimal), хранящие числа с плавающей точкой с настраиваемой точностью.)8687Числа создаются с помощью числовых литералов или как результат встроенных функций и операторов. Обычные целочисленные литералы (включая двоичные, шестнадцатеричные и восьмеричные числа) дают обычные целые числа, если только обозначаемое ими значение не слишком велико для представления в виде обычного целого; в этом случае они дают длинное целое число. Целочисленные литералы с суффиксом `'L'` или `'l'` дают длинные целые числа (`'L'` предпочтительнее, потому что `1l` слишком похоже на одиннадцать!). Числовые литералы, содержащие десятичную точку или знак экспоненты, дают числа с плавающей точкой. Добавление `'j'` или `'J'` к числовому литералу даёт мнимое число (комплексное число с нулевой действительной частью), которое можно добавить к целому числу или числу с плавающей точкой, чтобы получить комплексное число с действительной и мнимой частями.8889Python полностью поддерживает смешанную арифметику: когда бинарный арифметический оператор имеет операнды разных числовых типов, операнд с более «узким» типом расширяется до типа другого операнда, при этом обычное целое у́же длинного целого, длинное целое у́же числа с плавающей точкой, а число с плавающей точкой у́же комплексного. Сравнения между числами смешанных типов используют то же правило. [2](https://python-all.ru/2.7/library/stdtypes.html#id13) Конструкторы [`int()`](https://python-all.ru/2.7/library/functions.html#int), [`long()`](https://python-all.ru/2.7/library/functions.html#long), [`float()`](https://python-all.ru/2.7/library/functions.html#float) и [`complex()`](https://python-all.ru/2.7/library/functions.html#complex) можно использовать для получения чисел конкретного типа.9091Все встроенные числовые типы поддерживают следующие операции. Смотрите [Оператор возведения в степень](https://python-all.ru/2.7/reference/expressions.html#power) и последующие разделы для получения информации о приоритетах операторов.9293| Операция | Результат | Примечания |94| --- | --- | --- |95| `x + y` | сумма *x* и *y* |  |96| `x - y` | разность *x* и *y* |  |97| `x * y` | произведение *x* и *y* |  |98| `x / y` | частное *x* и *y* | (1) |99| `x // y` | частное (с округлением вниз) от деления *x* на *y* | (4)(5) |100| `x % y` | остаток от `x / y` | (4) |101| `-x` | *x* с обратным знаком |  |102| `+x` | *x* без изменений |  |103| `abs(x)` | абсолютное значение или модуль *x* | (3) |104| `int(x)` | *x*, преобразованное в целое число | (2) |105| `long(x)` | *x*, преобразованное в длинное целое | (2) |106| `float(x)` | *x*, преобразованное в число с плавающей запятой | (6) |107| `complex(re,im)` | комплексное число с действительной частью *re* и мнимой частью *im*. *im* по умолчанию равно нулю. |  |108| `c.conjugate()` | сопряжённое комплексного числа *c*. (Тождественно для действительных чисел) |  |109| `divmod(x, y)` | пара `(x // y, x % y)` | (3)(4) |110| `pow(x, y)` | *x* в степени *y* | (3)(7) |111| `x ** y` | *x* в степени *y* | (7) |112113Примечания:1141151. Для целочисленного деления (обычных или длинных целых) результатом является целое число. Результат всегда округляется в сторону минус бесконечности: 1/2 равно 0, (-1)/2 равно -1, 1/(-2) равно -1 и (-1)/(-2) равно 0. Обратите внимание, что результат будет длинным целым, если хотя бы один операнд является длинным целым, независимо от числового значения.1162. Преобразование из чисел с плавающей точкой с помощью [`int()`](https://python-all.ru/2.7/library/functions.html#int) или [`long()`](https://python-all.ru/2.7/library/functions.html#long) отбрасывает дробную часть в сторону нуля, как и родственная функция [`math.trunc()`](https://python-all.ru/2.7/library/math.html#math.trunc). Используйте функцию [`math.floor()`](https://python-all.ru/2.7/library/math.html#math.floor) для округления вниз и [`math.ceil()`](https://python-all.ru/2.7/library/math.html#math.ceil) для округления вверх.1173. См. [Встроенные функции](https://python-all.ru/2.7/library/functions.html#built-in-funcs) для полного описания.1184. Устарело с версии 2.3: Оператор целочисленного деления, оператор взятия остатка и функция [`divmod()`](https://python-all.ru/2.7/library/functions.html#divmod) больше не определены для комплексных чисел. Вместо этого при необходимости преобразуйте в число с плавающей точкой с помощью функции [`abs()`](https://python-all.ru/2.7/library/functions.html#abs).1195. Также называется целочисленным делением. Результирующее значение является целым числом, хотя тип результата не обязательно int.1206. float также принимает строки “nan” и “inf” с необязательным префиксом “+” или “-” для Not a Number (NaN) и положительной или отрицательной бесконечности.121122   Новое в версии 2.6.1237. Python определяет `pow(0, 0)` и `0 ** 0` как `1`, что общепринято для языков программирования.124125Все типы [`numbers.Real`](https://python-all.ru/2.7/library/numbers.html#numbers.Real) ([`int`](https://python-all.ru/2.7/library/functions.html#int), [`long`](https://python-all.ru/2.7/library/functions.html#long) и [`float`](https://python-all.ru/2.7/library/functions.html#float)) также включают следующие операции:126127| Операция | Результат |128| --- | --- |129| [`math.trunc(x)`](https://python-all.ru/2.7/library/math.html#math.trunc) | *x*, усечённое до [`Integral`](https://python-all.ru/2.7/library/numbers.html#numbers.Integral) |130| [`round(x[, n])`](https://python-all.ru/2.7/library/functions.html#round) | *x*, округлённое до *n* знаков, с округлением половинок от нуля. Если *n* опущено, по умолчанию используется 0. |131| [`math.floor(x)`](https://python-all.ru/2.7/library/math.html#math.floor) | наибольшее целое число в виде float, меньшее или равное *x* |132| [`math.ceil(x)`](https://python-all.ru/2.7/library/math.html#math.ceil) | наименьшее целое число в виде float, большее или равное *x* |133134### 5.4.1. Побитовые операции над целыми типами135136Побитовые операции имеют смысл только для целых чисел. Отрицательные числа интерпретируются как их дополнительный код (при этом предполагается, что количество битов достаточно велико, чтобы при операции не произошло переполнения).137138Приоритеты двоичных побитовых операций ниже, чем у числовых операций, и выше, чем у сравнений; унарная операция `~` имеет тот же приоритет, что и другие унарные числовые операции (`+` и `-`).139140В этой таблице перечислены побитовые операции, отсортированные по возрастанию приоритета:141142| Операция | Результат | Примечания |143| --- | --- | --- |144| `x \| y` | побитовое *ИЛИ* для *x* и *y* |  |145| `x ^ y` | побитовое *исключающее ИЛИ* для *x* и *y* |  |146| `x & y` | побитовое *И* для *x* и *y* |  |147| `x << n` | *x*, сдвинутое влево на *n* битов | (1)(2) |148| `x >> n` | *x*, сдвинутое вправо на *n* битов | (1)(3) |149| `~x` | инвертированные биты *x* |  |150151Примечания:1521531. Отрицательные значения сдвига недопустимы и вызывают [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError).1542. Сдвиг влево на *n* бит эквивалентен умножению на `pow(2, n)`. Если результат превышает диапазон обычных целых чисел, возвращается длинное целое.1553. Сдвиг вправо на *n* бит эквивалентен делению на `pow(2, n)`.156157### 5.4.2. Дополнительные методы целых типов158159Целочисленные типы реализуют [`numbers.Integral`](https://python-all.ru/2.7/library/numbers.html#numbers.Integral) [абстрактный базовый класс](https://python-all.ru/2.7/glossary.html#term-abstract-base-class). Кроме того, они предоставляют ещё один метод:160161#### `int.bit_length()`162163#### `long.bit_length()`164165Возвращает количество битов, необходимое для представления целого числа в двоичном виде, без учёта знака и ведущих нулей:166167```python168>>> n = -37169>>> bin(n)170'-0b100101'171>>> n.bit_length()1726173```174175Более точно, если `x` ненулевое, то `x.bit_length()` – это единственное положительное целое `k`, такое что `2**(k-1) <= abs(x) < 2**k`. Эквивалентно, когда `abs(x)` достаточно мало, чтобы иметь правильно округлённый логарифм, то `k = 1 + int(log(abs(x), 2))`. Если `x` равно нулю, то `x.bit_length()` возвращает `0`.176177Эквивалентно следующему:178179```python180def bit_length(self):181    s = bin(self)       # двоичное представление:  bin(-37) --> '-0b100101'182    s = s.lstrip('-0b') # удалить ведущие нули и знак минус183    return len(s)       # len('100101') --> 6184```185186Новое в версии 2.7.187188### 5.4.3. Дополнительные методы типа float189190Тип float реализует [`numbers.Real`](https://python-all.ru/2.7/library/numbers.html#numbers.Real) [абстрактный базовый класс](https://python-all.ru/2.7/glossary.html#term-abstract-base-class). Кроме того, float имеет следующие дополнительные методы.191192#### `float.as_integer_ratio()`193194Возвращает пару целых чисел, отношение которых в точности равно исходному числу с плавающей запятой, с положительным знаменателем. Возбуждает [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) для бесконечностей и [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError) для NaN.195196Новое в версии 2.6.197198#### `float.is_integer()`199200Возвращает `True`, если экземпляр float является конечным и имеет целочисленное значение, и `False` в противном случае:201202```python203>>> (-2.0).is_integer()204True205>>> (3.2).is_integer()206False207```208209Новое в версии 2.6.210211Два метода поддерживают преобразование в шестнадцатеричные строки и обратно. Поскольку числа с плавающей запятой в Python внутренне хранятся в двоичном виде, преобразование числа с плавающей запятой в строку *decimal* и обратно обычно связано с небольшой ошибкой округления. Напротив, шестнадцатеричные строки позволяют точно представлять и задавать числа с плавающей запятой. Это может быть полезно при отладке и в численных расчётах.212213#### `float.hex()`214215Возвращает представление числа с плавающей запятой в виде шестнадцатеричной строки. Для конечных чисел с плавающей запятой это представление всегда будет содержать ведущий `0x` и завершающий `p` и экспоненту.216217Новое в версии 2.6.218219#### `float.fromhex(s)`220221Метод класса, возвращающий число с плавающей запятой, представленное шестнадцатеричной строкой *s*. Строка *s* может содержать начальные и конечные пробелы.222223Новое в версии 2.6.224225Обратите внимание, что [`float.hex()`](https://python-all.ru/2.7/library/stdtypes.html#float.hex) – это метод экземпляра, а [`float.fromhex()`](https://python-all.ru/2.7/library/stdtypes.html#float.fromhex) – метод класса.226227Шестнадцатеричная строка имеет вид:228229```python230[sign] ['0x'] integer ['.' fraction] ['p' exponent]231```232233где необязательный `sign` может быть либо `+`, либо `-`, `integer` и `fraction` – строки шестнадцатеричных цифр, а `exponent` – десятичное целое с необязательным ведущим знаком. Регистр не имеет значения, и должна быть хотя бы одна шестнадцатеричная цифра в целой части либо в дробной. Этот синтаксис похож на синтаксис, указанный в разделе 6.4.4.2 стандарта C99, а также на синтаксис, используемый в Java 1.5 и выше. В частности, результат [`float.hex()`](https://python-all.ru/2.7/library/stdtypes.html#float.hex) может использоваться как шестнадцатеричный литерал с плавающей запятой в коде C или Java, а шестнадцатеричные строки, созданные символом формата `%a` в C или `Double.toHexString` в Java, принимаются [`float.fromhex()`](https://python-all.ru/2.7/library/stdtypes.html#float.fromhex).234235Обратите внимание, что экспонента записывается в десятичном, а не шестнадцатеричном виде, и что она указывает степень двойки, на которую умножается коэффициент. Например, шестнадцатеричная строка `0x3.a7p10` представляет число с плавающей запятой `(3 + 10./16 + 7./16**2) * 2.0**10`, или `3740.0`:236237```python238>>> float.fromhex('0x3.a7p10')2393740.0240```241242Применение обратного преобразования к `3740.0` даёт другую шестнадцатеричную строку, представляющую то же число:243244```python245>>> float.hex(3740.0)246'0x1.d380000000000p+11'247```248249## 5.5. Типы итераторов250251Новое в версии 2.2.252253Python поддерживает концепцию итерации по контейнерам. Это реализовано с помощью двух различных методов; они используются, чтобы позволить пользовательским классам поддерживать итерацию. Последовательности, описанные ниже более подробно, всегда поддерживают методы итерации.254255Для поддержки итерации в объектах-контейнерах необходимо определить один метод:256257#### `container.__iter__()`258259Возвращает объект-итератор. Этот объект должен поддерживать протокол итератора, описанный ниже. Если контейнер поддерживает разные типы итерации, можно предоставить дополнительные методы для явного запроса итераторов для этих типов. (Примером объекта, поддерживающего несколько форм итерации, может служить древовидная структура, поддерживающая обход как в ширину, так и в глубину.) Этот метод соответствует слоту [`tp_iter`](https://python-all.ru/2.7/c-api/typeobj.html#c.PyTypeObject.tp_iter) структуры типа для объектов Python в API Python/C.260261Сами объекты итераторов должны поддерживать следующие два метода, которые вместе образуют *протокол итератора*:262263#### `iterator.__iter__()`264265Возвращает сам объект-итератор. Это необходимо, чтобы контейнеры и итераторы можно было использовать с операторами [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for) и [`in`](https://python-all.ru/2.7/reference/expressions.html#in). Данный метод соответствует слоту [`tp_iter`](https://python-all.ru/2.7/c-api/typeobj.html#c.PyTypeObject.tp_iter) структуры типа для объектов Python в API Python/C.266267#### `iterator.next()`268269Возвращает следующий элемент из контейнера. Если больше элементов нет, возбуждает исключение [`StopIteration`](https://python-all.ru/2.7/library/exceptions.html#exceptions.StopIteration). Этот метод соответствует слоту [`tp_iternext`](https://python-all.ru/2.7/c-api/typeobj.html#c.PyTypeObject.tp_iternext) структуры типа для объектов Python в API Python/C.270271Python определяет несколько объектов итераторов для поддержки итерации по общим и специфическим типам последовательностей, словарям и другим более специализированным формам. Конкретные типы не важны, кроме их реализации протокола итератора.272273Протокол предполагает, что если метод [`next()`](https://python-all.ru/2.7/library/stdtypes.html#iterator.next) итератора однажды возбудил [`StopIteration`](https://python-all.ru/2.7/library/exceptions.html#exceptions.StopIteration), то при последующих вызовах он будет продолжать возбуждать то же исключение. Реализации, нарушающие это правило, считаются некорректными. (Ограничение добавлено в Python 2.3; в Python 2.2 многие итераторы этому правилу не соответствовали.)274275### 5.5.1. Типы генераторов276277Python [генератор](https://python-all.ru/2.7/glossary.html#term-generator)ы предоставляют удобный способ реализации протокола итератора. Если метод [`__iter__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__iter__) объекта-контейнера реализован как генератор, он автоматически возвращает объект итератора (технически объект генератора), предоставляющий методы [`__iter__()`](https://python-all.ru/2.7/library/stdtypes.html#iterator.__iter__) и [`next()`](https://python-all.ru/2.7/library/stdtypes.html#iterator.next). Дополнительную информацию о генераторах можно найти в [документации по выражению yield](https://python-all.ru/2.7/reference/expressions.html#yieldexpr).278279## 5.6. Типы последовательностей – [`str`](https://python-all.ru/2.7/library/functions.html#str), [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode), `list`, [`tuple`](https://python-all.ru/2.7/library/functions.html#tuple), [`bytearray`](https://python-all.ru/2.7/library/functions.html#bytearray), [`buffer`](https://python-all.ru/2.7/library/functions.html#buffer), [`xrange`](https://python-all.ru/2.7/library/functions.html#xrange)280281Существует семь типов последовательностей: строки, строки Unicode, списки, кортежи, bytearrays, buffers и объекты xrange.282283Для других контейнеров см. встроенные классы [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict) и [`set`](https://python-all.ru/2.7/library/stdtypes.html#set), а также модуль [`collections`](https://python-all.ru/2.7/library/collections.html#module-collections).284285Строковые литералы записываются в одинарных или двойных кавычках: `'xyzzy'`, `"frobozz"`. См. [Строковые литералы](https://python-all.ru/2.7/reference/lexical_analysis.html#strings) для получения дополнительной информации о строковых литералах. Строки Unicode во многом похожи на строки, но в синтаксисе обозначаются предшествующим символом `'u'`: `u'abc'`, `u"def"`. В дополнение к описанной здесь функциональности существуют также строковые методы, описанные в разделе [Строковые методы](https://python-all.ru/2.7/library/stdtypes.html#string-methods). Списки создаются с помощью квадратных скобок, элементы разделяются запятыми: `[a, b, c]`. Кортежи создаются оператором запятой (не в квадратных скобках), с enclosing parentheses или без, но пустой кортеж должен заключаться в скобки, например `a, b, c` или `()`. Кортеж из одного элемента должен иметь завершающую запятую, например `(d,)`.286287Объекты bytearray создаются с помощью встроенной функции [`bytearray()`](https://python-all.ru/2.7/library/functions.html#bytearray).288289Объекты buffer не поддерживаются напрямую синтаксисом Python, но могут быть созданы вызовом встроенной функции [`buffer()`](https://python-all.ru/2.7/library/functions.html#buffer). Они не поддерживают конкатенацию или повторение.290291Объекты типа xrange похожи на буферы тем, что для их создания нет специального синтаксиса, но они создаются с помощью функции [`xrange()`](https://python-all.ru/2.7/library/functions.html#xrange). Они не поддерживают срезы, конкатенацию или повторение, и использование `in`, `not in`, [`min()`](https://python-all.ru/2.7/library/functions.html#min) или [`max()`](https://python-all.ru/2.7/library/functions.html#max) для них неэффективно.292293Большинство типов последовательностей поддерживают следующие операции. Операции `in` и `not in` имеют тот же приоритет, что и операции сравнения. Операции `+` и `*` имеют тот же приоритет, что и соответствующие числовые операции. [3](https://python-all.ru/2.7/library/stdtypes.html#id14) Дополнительные методы предоставляются для [Изменяемых типов последовательностей](https://python-all.ru/2.7/library/stdtypes.html#typesseq-mutable).294295В этой таблице перечислены операции над последовательностями, отсортированные по возрастанию приоритета. В таблице *s* и *t* – последовательности одного типа; *n*, *i* и *j* – целые числа.296297| Операция | Результат | Примечания |298| --- | --- | --- |299| `x in s` | `True`, если элемент последовательности *s* равен *x*, иначе `False` | (1) |300| `x not in s` | `False`, если элемент последовательности *s* равен *x*, иначе `True` | (1) |301| `s + t` | конкатенация *s* и *t* | (6) |302| `s * n, n * s` | эквивалентно сложению *s* с собой *n* раз | (2) |303| `s[i]` | *i*-й элемент *s*, начиная с 0 | (3) |304| `s[i:j]` | срез *s* от *i* до *j* | (3)(4) |305| `s[i:j:k]` | срез *s* от *i* до *j* с шагом *k* | (3)(5) |306| `len(s)` | длина *s* |  |307| `min(s)` | наименьший элемент *s* |  |308| `max(s)` | наибольший элемент *s* |  |309| `s.index(x)` | индекс первого вхождения *x* в *s* |  |310| `s.count(x)` | общее количество вхождений *x* в *s* |  |311312Типы последовательностей также поддерживают сравнение. В частности, кортежи и списки сравниваются лексикографически путём сравнения соответствующих элементов. Это означает, что для равенства каждый элемент должен быть равен, а обе последовательности должны быть одного типа и иметь одинаковую длину. (Подробнее см. [Сравнения](https://python-all.ru/2.7/reference/expressions.html#comparisons) в справочнике по языку.)313314Примечания:3153161. Когда *s* является строкой или строкой Unicode, операции `in` и `not in` действуют как проверка на подстроку. В версиях Python до 2.3 *x* должна была быть строкой длины 1. В Python 2.3 и новее *x* может быть строкой любой длины.3172. Значения *n* меньше `0` трактуются как `0` (что даёт пустую последовательность того же типа, что и *s*). Обратите внимание: элементы последовательности *s* не копируются; на них ссылаются многократно. Это часто преследует начинающих программистов Python; рассмотрите:318319   ```python320   >>> lists = [[]] * 3321   >>> lists322   [[], [], []]323   >>> lists[0].append(3)324   >>> lists325   [[3], [3], [3]]326   ```327328   Произошло следующее: `[[]]` – это список из одного элемента, содержащего пустой список, поэтому все три элемента `[[]] * 3` являются ссылками на этот единственный пустой список. Изменение любого из элементов `lists` изменяет этот единственный список. Создать список из разных списков можно так:329330   ```python331   >>> lists = [[] for i in range(3)]332   >>> lists[0].append(3)333   >>> lists[1].append(5)334   >>> lists[2].append(7)335   >>> lists336   [[3], [5], [7]]337   ```338339   Подробное объяснение доступно в разделе FAQ [Как создать многомерный список?](https://python-all.ru/2.7/faq/programming.html#faq-multidimensional-list).3403. Если *i* или *j* отрицательно, индекс отсчитывается от конца последовательности *s*: подставляется `len(s) + i` или `len(s) + j`. Но обратите внимание, что `-0` по-прежнему равно `0`.3414. Срез *s* от *i* до *j* определяется как последовательность элементов с индексом *k*, для которых `i <= k < j`. Если *i* или *j* больше `len(s)`, используйте `len(s)`. Если *i* опущен или равен `None`, используйте `0`. Если *j* опущен или равен `None`, используйте `len(s)`. Если *i* больше или равно *j*, срез пуст.3425. The slice of *s* from *i* to *j* with step *k* is defined as the sequence of items with index `x = i + n*k` such that `0 <= n < (j-i)/k`. In other words, the indices are `i`, `i+k`, `i+2*k`, `i+3*k` and so on, stopping when *j* is reached (but never including *j*). When *k* is positive, *i* and *j* are reduced to `len(s)` if they are greater. When *k* is negative, *i* and *j* are reduced to `len(s) - 1` if they are greater. If *i* or *j* are omitted or `None`, they become “end” values (which end depends on the sign of *k*). Note, *k* cannot be zero. If *k* is `None`, it is treated like `1`.3436. **Особенность реализации CPython:** Если *s* и *t* обе являются строками, некоторые реализации Python, такие как CPython, обычно могут выполнять оптимизацию на месте для присваиваний вида `s = s + t` или `s += t`. Когда это применимо, такая оптимизация значительно снижает вероятность квадратичного времени выполнения. Эта оптимизация зависит от версии и реализации. Для кода, чувствительного к производительности, предпочтительнее использовать метод [`str.join()`](https://python-all.ru/2.7/library/stdtypes.html#str.join), который гарантирует стабильную линейную производительность конкатенации во всех версиях и реализациях.344345   Изменено в версии 2.4: Ранее конкатенация строк никогда не выполнялась на месте.346347### 5.6.1. Строковые методы348349Ниже перечислены строковые методы, которые поддерживаются как 8-битными строками, так и объектами Unicode. Некоторые из них также доступны для объектов [`bytearray`](https://python-all.ru/2.7/library/functions.html#bytearray).350351Кроме того, строки Python поддерживают методы типов последовательностей, описанные в разделе [Типы последовательностей – str, unicode, list, tuple, bytearray, buffer, xrange](https://python-all.ru/2.7/library/stdtypes.html#typesseq). Для вывода форматированных строк используйте строки шаблонов или оператор `%`, описанный в разделе [Операции форматирования строк](https://python-all.ru/2.7/library/stdtypes.html#string-formatting). Также см. модуль [`re`](https://python-all.ru/2.7/library/re.html#module-re) для строковых функций на основе регулярных выражений.352353#### `str.capitalize()`354355Возвращает копию строки, в которой первый символ переведён в верхний регистр, а остальные – в нижний.356357Для 8-битных строк этот метод зависит от локали.358359#### `str.center(width[, fillchar])`360361Возвращает строку длины *width*, в которой исходная строка располагается по центру. Заполнение выполняется с использованием указанного символа *fillchar* (по умолчанию пробел).362363Изменено в версии 2.4: Добавлена поддержка аргумента *fillchar*.364365#### `str.count(sub[, start[, end]])`366367Возвращает количество непересекающихся вхождений подстроки *sub* в диапазоне \[*start*, *end*\]. Необязательные аргументы *start* и *end* интерпретируются как в нотации срезов.368369#### `str.decode([encoding[, errors]])`370371Декодирует строку с помощью кодека, зарегистрированного для *encoding*. *encoding* по умолчанию берётся из кодировки строки по умолчанию. *errors* можно задать для установки другой схемы обработки ошибок. По умолчанию используется `'strict'`, что означает, что ошибки кодирования вызывают [`UnicodeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.UnicodeError). Другие возможные значения: `'ignore'`, `'replace'` и любые другие имена, зарегистрированные через [`codecs.register_error()`](https://python-all.ru/2.7/library/codecs.html#codecs.register_error); см. раздел [Базовые классы кодеков](https://python-all.ru/2.7/library/codecs.html#codec-base-classes).372373Новое в версии 2.2.374375Изменено в версии 2.3: Добавлена поддержка других схем обработки ошибок.376377Изменено в версии 2.7: Добавлена поддержка именованных аргументов.378379#### `str.encode([encoding[, errors]])`380381Возвращает закодированную версию строки. Кодировка по умолчанию – текущая строковая кодировка по умолчанию. *errors* можно задать для установки другой схемы обработки ошибок. Значение по умолчанию для *errors*`'strict'`, то есть ошибки кодирования вызывают [`UnicodeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.UnicodeError). Другие возможные значения: `'ignore'`, `'replace'`, `'xmlcharrefreplace'`, `'backslashreplace'` и любые другие имена, зарегистрированные через [`codecs.register_error()`](https://python-all.ru/2.7/library/codecs.html#codecs.register_error); см. раздел [Базовые классы кодеков](https://python-all.ru/2.7/library/codecs.html#codec-base-classes). Список возможных кодировок см. в разделе [Стандартные кодировки](https://python-all.ru/2.7/library/codecs.html#standard-encodings).382383Новое в версии 2.0.384385Изменено в версии 2.3: Добавлена поддержка `'xmlcharrefreplace'` и `'backslashreplace'` и других схем обработки ошибок.386387Изменено в версии 2.7: Добавлена поддержка именованных аргументов.388389#### `str.endswith(suffix[, start[, end]])`390391Возвращает `True`, если строка заканчивается указанным *suffix*, иначе возвращает `False`. *suffix* также может быть кортежем суффиксов для поиска. С необязательным *start* проверка начинается с этой позиции. С необязательным *end* сравнение прекращается на этой позиции.392393Изменено в версии 2.5: Принимает кортежи в качестве *suffix*.394395#### `str.expandtabs([tabsize])`396397Возвращает копию строки, в которой все символы табуляции заменены на один или несколько пробелов в зависимости от текущей позиции столбца и заданного размера табуляции. Позиции табуляции находятся через каждые *tabsize* символов (по умолчанию 8, что даёт позиции табуляции на столбцах 0, 8, 16 и т.д.). Для разворачивания строки текущий столбец устанавливается в ноль, и строка просматривается посимвольно. Если символ – табуляция (`\t`), в результат вставляется один или несколько пробелов, пока текущий столбец не сравняется со следующей позицией табуляции. (Сам символ табуляции не копируется.) Если символ – новая строка (`\n`) или возврат каретки (`\r`), он копируется, а текущий столбец сбрасывается в ноль. Любой другой символ копируется без изменений, и текущий столбец увеличивается на единицу независимо от того, как этот символ представлен при печати.398399```python400>>> '01\t012\t0123\t01234'.expandtabs()401'01      012     0123    01234'402>>> '01\t012\t0123\t01234'.expandtabs(4)403'01  012 0123    01234'404```405406#### `str.find(sub[, start[, end]])`407408Возвращает наименьший индекс в строке, где подстрока *sub* найдена в срезе `s[start:end]`. Необязательные аргументы *start* и *end* интерпретируются как в записи среза. Возвращает `-1`, если *sub* не найдена.409410> **Примечание**411>412> Метод [`find()`](https://python-all.ru/2.7/library/stdtypes.html#str.find) следует использовать только если нужно знать позицию *sub*. Чтобы проверить, является ли *sub* подстрокой, используйте оператор [`in`](https://python-all.ru/2.7/reference/expressions.html#in):413>414> ```python415> >>> 'Py' in 'Python'416> True417> ```418419#### `str.format(*args, **kwargs)`420421Выполняет операцию форматирования строки. Строка, к которой применяется этот метод, может содержать буквальный текст или поля замены, ограниченные фигурными скобками `{}`. Каждое поле замены содержит либо числовой индекс позиционного аргумента, либо имя именованного аргумента. Возвращает копию строки, в которой каждое поле замены заменено строковым значением соответствующего аргумента.422423```python424>>> "The sum of 1 + 2 is {0}".format(1+2)425'The sum of 1 + 2 is 3'426```427428См. [Синтаксис форматных строк](https://python-all.ru/2.7/library/string.html#formatstrings) для описания различных параметров форматирования, которые можно указать в форматных строках.429430Этот метод форматирования строк – новый стандарт в Python 3, и в новом коде его следует предпочитать форматированию `%`, описанному в разделе [«Операции форматирования строк»](https://python-all.ru/2.7/library/stdtypes.html#string-formatting).431432Новое в версии 2.6.433434#### `str.index(sub[, start[, end]])`435436Как [`find()`](https://python-all.ru/2.7/library/stdtypes.html#str.find), но возбуждает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если подстрока не найдена.437438#### `str.isalnum()`439440Возвращает True, если все символы в строке являются буквенно-цифровыми и есть хотя бы один символ, иначе False.441442Для 8-битных строк этот метод зависит от локали.443444#### `str.isalpha()`445446Возвращает True, если все символы в строке являются буквенными и есть хотя бы один символ, иначе False.447448Для 8-битных строк этот метод зависит от локали.449450#### `str.isdigit()`451452Возвращает True, если все символы в строке являются цифрами и есть хотя бы один символ, иначе False.453454Для 8-битных строк этот метод зависит от локали.455456#### `str.islower()`457458Возвращает true, если все буквенные символы [4](https://python-all.ru/2.7/library/stdtypes.html#id15) в строке в нижнем регистре и есть хотя бы один такой символ, иначе false.459460Для 8-битных строк этот метод зависит от локали.461462#### `str.isspace()`463464Возвращает true, если строка содержит только пробельные символы и длина строки не менее одного символа; в противном случае – false.465466Для 8-битных строк этот метод зависит от локали.467468#### `str.istitle()`469470Возвращает true, если строка является строкой в заглавном регистре (titlecased) и есть хотя бы один символ, например прописные символы могут следовать только за символами без регистра, а строчные – только за символами с регистром. Иначе возвращает false.471472Для 8-битных строк этот метод зависит от локали.473474#### `str.isupper()`475476Возвращает true, если все буквенные символы [4](https://python-all.ru/2.7/library/stdtypes.html#id15) в строке в верхнем регистре и есть хотя бы один такой символ, иначе false.477478Для 8-битных строк этот метод зависит от локали.479480#### `str.join(iterable)`481482Возвращает строку, полученную конкатенацией строк из *iterable*. Если в *iterable* есть хотя бы один объект Unicode, возвращается строка Unicode. Исключение [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError) возбуждается, если в *iterable* есть значения, не являющиеся строками или объектами Unicode. Разделителем между элементами служит строка, вызвавшая этот метод.483484#### `str.ljust(width[, fillchar])`485486Возвращает строку, выровненную по левому краю до длины *width*. Заполнение выполняется указанным символом *fillchar* (по умолчанию пробел). Исходная строка возвращается, если *width* меньше или равно `len(s)`.487488Изменено в версии 2.4: Добавлена поддержка аргумента *fillchar*.489490#### `str.lower()`491492Возвращает копию строки, в которой все символы, имеющие регистр, [4](https://python-all.ru/2.7/library/stdtypes.html#id15) преобразованы в нижний регистр.493494Для 8-битных строк этот метод зависит от локали.495496#### `str.lstrip([chars])`497498Возвращает копию строки с удалёнными начальными символами. Аргумент *chars* – это строка, задающая набор удаляемых символов. Если он опущен или равен `None`, аргумент *chars* по умолчанию удаляет пробельные символы. Аргумент *chars* – это не префикс; удаляются все комбинации входящих в него символов:499500```python501>>> '   spacious   '.lstrip()502'spacious   '503>>> 'www.example.com'.lstrip('cmowz.')504'example.com'505```506507Изменено в версии 2.2.2: Добавлена поддержка аргумента *chars*.508509#### `str.partition(sep)`510511Разделяет строку по первому вхождению *sep* и возвращает кортеж из трёх элементов: часть до разделителя, сам разделитель и часть после разделителя. Если разделитель не найден, возвращает кортеж из трёх элементов, содержащий саму строку и две пустые строки.512513Новое в версии 2.5.514515#### `str.replace(old, new[, count])`516517Возвращает копию строки, в которой все вхождения подстроки *old* заменены на *new*. Если задан необязательный аргумент *count*, заменяются только первые *count* вхождений.518519#### `str.rfind(sub[, start[, end]])`520521Возвращает наибольший индекс в строке, на котором найдена подстрока *sub*, при условии что *sub* находится в пределах `s[start:end]`. Необязательные аргументы *start* и *end* интерпретируются как в записи среза. В случае неудачи возвращает `-1`.522523#### `str.rindex(sub[, start[, end]])`524525Как [`rfind()`](https://python-all.ru/2.7/library/stdtypes.html#str.rfind), но возбуждает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если подстрока *sub* не найдена.526527#### `str.rjust(width[, fillchar])`528529Возвращает строку, выровненную по правому краю до длины *width*. Заполнение выполняется указанным символом *fillchar* (по умолчанию пробел). Исходная строка возвращается, если *width* меньше или равно `len(s)`.530531Изменено в версии 2.4: Добавлена поддержка аргумента *fillchar*.532533#### `str.rpartition(sep)`534535Разделяет строку по последнему вхождению *sep* и возвращает кортеж из трёх элементов: часть до разделителя, сам разделитель и часть после разделителя. Если разделитель не найден, возвращает кортеж из трёх элементов, содержащий две пустые строки и саму строку.536537Новое в версии 2.5.538539#### `str.rsplit([sep[, maxsplit]])`540541Возвращает список слов в строке, используя *sep* в качестве строки-разделителя. Если указан *maxsplit*, выполняется не более *maxsplit* разбиений, причём *самых правых*. Если *sep* не указан или равен `None`, в качестве разделителя используется любая строка из пробельных символов. За исключением разбиения справа, [`rsplit()`](https://python-all.ru/2.7/library/stdtypes.html#str.rsplit) ведёт себя как [`split()`](https://python-all.ru/2.7/library/stdtypes.html#str.split), подробно описанный ниже.542543Новое в версии 2.4.544545#### `str.rstrip([chars])`546547Возвращает копию строки с удалёнными завершающими символами. Аргумент *chars* – это строка, задающая набор удаляемых символов. Если он опущен или равен `None`, аргумент *chars* по умолчанию удаляет пробельные символы. Аргумент *chars* не является суффиксом; вместо этого удаляются все комбинации его значений:548549```python550>>> '   spacious   '.rstrip()551'   spacious'552>>> 'mississippi'.rstrip('ipz')553'mississ'554```555556Изменено в версии 2.2.2: Добавлена поддержка аргумента *chars*.557558#### `str.split([sep[, maxsplit]])`559560Возвращает список слов в строке, используя *sep* в качестве строки-разделителя. Если указан *maxsplit*, выполняется не более *maxsplit* разбиений (следовательно, список будет содержать не более `maxsplit+1` элементов). Если *maxsplit* не указан или равен `-1`, ограничения на количество разбиений нет (выполняются все возможные разбиения).561562Если указан *sep*, последовательные разделители не группируются, а считаются разделителями пустых строк (например, `'1,,2'.split(',')` возвращает `['1', '', '2']`). Аргумент *sep* может состоять из нескольких символов (например, `'1<>2<>3'.split('<>')` возвращает `['1', '2', '3']`). Разделение пустой строки с указанным разделителем возвращает `['']`.563564Если *sep* не указан или равен `None`, применяется другой алгоритм разбиения: последовательности пробельных символов считаются одним разделителем, и результат не будет содержать пустых строк в начале или конце, если строка содержит начальные или завершающие пробелы. Следовательно, разбиение пустой строки или строки, состоящей только из пробелов, с разделителем `None` возвращает `[]`.565566Например, `' 1 2 3 '.split()` возвращает `['1', '2', '3']`, а `' 1 2 3 '.split(None, 1)` возвращает `['1', '2 3 ']`.567568#### `str.splitlines([keepends])`569570Возвращает список строк из строки, разбивая по границам строк. Этот метод использует подход [универсальных новых строк](https://python-all.ru/2.7/glossary.html#term-universal-newlines) для разбиения строк. Символы перевода строки не включаются в результирующий список, если только *keepends* не задан и истинен.571572Python распознаёт `"\r"`, `"\n"` и `"\r\n"` как границы строк для 8-битных строк.573574Например:575576```python577>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()578['ab c', '', 'de fg', 'kl']579>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(True)580['ab c\n', '\n', 'de fg\r', 'kl\r\n']581```582583В отличие от [`split()`](https://python-all.ru/2.7/library/stdtypes.html#str.split), когда задана строка-разделитель *sep*, этот метод возвращает пустой список для пустой строки, и концевой разрыв строки не приводит к появлению дополнительной строки:584585```python586>>> "".splitlines()587[]588>>> "One line\n".splitlines()589['One line']590```591592Для сравнения, `split('\n')` возвращает:593594```python595>>> ''.split('\n')596['']597>>> 'Two lines\n'.split('\n')598['Two lines', '']599```600601#### `unicode.splitlines([keepends])`602603Возвращает список строк из строки, как [`str.splitlines()`](https://python-all.ru/2.7/library/stdtypes.html#str.splitlines). Однако метод для Unicode разбивает по следующим границам строк, которые являются надмножеством [универсальных символов новой строки](https://python-all.ru/2.7/glossary.html#term-universal-newlines), распознаваемых для 8-битных строк.604605| Представление | Описание |606| --- | --- |607| `\n` | Перевод строки (LF) |608| `\r` | Возврат каретки (CR) |609| `\r\n` | Возврат каретки + перевод строки (CR+LF) |610| `\v` или `\x0b` | Линейная табуляция |611| `\f` или `\x0c` | Перевод страницы |612| `\x1c` | Разделитель файлов |613| `\x1d` | Разделитель групп |614| `\x1e` | Разделитель записей |615| `\x85` | Следующая строка (управляющий код C1) |616| `\u2028` | Разделитель строк |617| `\u2029` | Разделитель абзацев |618619Изменено в версии 2.7: `\v` и `\f` добавлены в список границ строк.620621#### `str.startswith(prefix[, start[, end]])`622623Возвращает `True`, если строка начинается с *prefix*, иначе возвращает `False`. *prefix* также может быть кортежем префиксов для поиска. При указании необязательного *start* строка проверяется начиная с этой позиции. При указании необязательного *end* сравнение строки прекращается на этой позиции.624625Изменено в версии 2.5: Допускаются кортежи в качестве *prefix*.626627#### `str.strip([chars])`628629Возвращает копию строки с удалёнными начальными и завершающими символами. Аргумент *chars* – это строка, задающая набор удаляемых символов. Если он опущен или равен `None`, аргумент *chars* по умолчанию удаляет пробельные символы. Аргумент *chars* не является префиксом или суффиксом; вместо этого удаляются все комбинации его значений:630631```python632>>> '   spacious   '.strip()633'spacious'634>>> 'www.example.com'.strip('cmowz.')635'example'636```637638Изменено в версии 2.2.2: Добавлена поддержка аргумента *chars*.639640#### `str.swapcase()`641642Возвращает копию строки, в которой символы верхнего регистра преобразованы в нижний и наоборот.643644Для 8-битных строк этот метод зависит от локали.645646#### `str.title()`647648Возвращает строку, где каждое слово начинается с прописной буквы, а остальные символы – строчные.649650Алгоритм использует простое, не зависящее от языка определение слова как группы последовательных букв. Это определение работает во многих контекстах, но означает, что апострофы в сокращениях и притяжательных формах образуют границы слов, что может быть нежелательным результатом:651652```python653>>> "they're bill's friends from the UK".title()654"They'Re Bill'S Friends From The Uk"655```656657Обходной путь для апострофов можно построить с помощью регулярных выражений:658659```python660>>> import re661>>> def titlecase(s):662...     return re.sub(r"[A-Za-z]+('[A-Za-z]+)?",663...                   lambda mo: mo.group(0)[0].upper() +664...                              mo.group(0)[1:].lower(),665...                   s)666...667>>> titlecase("they're bill's friends.")668"They're Bill's Friends."669```670671Для 8-битных строк этот метод зависит от локали.672673#### `str.translate(table[, deletechars])`674675Возвращает копию строки, из которой удалены все символы, присутствующие в необязательном аргументе *deletechars*, а оставшиеся символы преобразованы с помощью переданной таблицы перекодировки, которая должна быть строкой длиной 256.676677Для создания таблицы перекодировки можно воспользоваться вспомогательной функцией [`maketrans()`](https://python-all.ru/2.7/library/string.html#string.maketrans) из модуля [`string`](https://python-all.ru/2.7/library/string.html#module-string). Для строковых объектов, если требуется только удаление символов, задайте аргумент *table* равным `None`:678679```python680>>> 'read this short text'.translate(None, 'aeiou')681'rd ths shrt txt'682```683684Новое в версии 2.6: Добавлена поддержка аргумента `None` *table*.685686Для объектов Unicode метод [`translate()`](https://python-all.ru/2.7/library/stdtypes.html#str.translate) не принимает необязательный аргумент *deletechars*. Вместо этого он возвращает копию *s*, где все символы преобразованы с помощью переданной таблицы перекодировки, которая должна быть отображением порядковых номеров Unicode в порядковые номера Unicode, строки Unicode или `None`. Символы, отсутствующие в отображении, остаются без изменений. Символы, сопоставленные с `None`, удаляются. Обратите внимание: более гибкий подход – создать собственный кодек для отображения символов с помощью модуля [`codecs`](https://python-all.ru/2.7/library/codecs.html#module-codecs) (см. `encodings.cp1251`).687688#### `str.upper()`689690Возвращает копию строки, в которой все символы, имеющие регистр, [4](https://python-all.ru/2.7/library/stdtypes.html#id15) преобразованы в верхний регистр. Учтите, что `s.upper().isupper()` может быть `False`, если `s` содержит символы без регистра или если категория Unicode результирующего символа(ов) – не «Lu» (буква, верхний регистр), а, например, «Lt» (буква, титульный регистр).691692Для 8-битных строк этот метод зависит от локали.693694#### `str.zfill(width)`695696Возвращает строку с числами, дополненную слева нулями до длины *width*. Знак префикса обрабатывается корректно. Исходная строка возвращается, если *width* меньше или равно `len(s)`.697698Новое в версии 2.2.2.699700Следующие методы доступны только для объектов unicode:701702#### `unicode.isnumeric()`703704Возвращает `True`, если в S содержатся только числовые символы, и `False` в противном случае. Числовые символы включают цифры и все символы, обладающие свойством числового значения Unicode, например U+2155 – VULGAR FRACTION ONE FIFTH (простая дробь одна пятая).705706#### `unicode.isdecimal()`707708Возвращает `True`, если в S содержатся только десятичные символы, и `False` в противном случае. Десятичные символы включают цифры и все символы, которые можно использовать для образования чисел с десятичным основанием, например U+0660 – ARABIC-INDIC DIGIT ZERO (арабско-индийская цифра ноль).709710### 5.6.2. Операции форматирования строк711712У строк и объектов Unicode есть одна уникальная встроенная операция: оператор `%` (взятие по модулю). Он также известен как оператор *форматирования* или *интерполяции* строк. При записи `format % values` (где *format* – строка или объект Unicode) спецификации преобразования `%` в *format* заменяются нулём или более элементами из *values*. Результат похож на использование `sprintf()` в языке C. Если *format* является объектом Unicode или если любой из объектов, преобразуемых с помощью `%s`, является объектом Unicode, результатом также будет объект Unicode.713714Если *format* требует один аргумент, то *values* может быть одним объектом, не являющимся кортежем. [5](https://python-all.ru/2.7/library/stdtypes.html#id16) В противном случае *values* должен быть кортежем с количеством элементов, точно указанным в строке формата, или одним объектом отображения (например, словарём).715716Спецификатор преобразования содержит два или более символа и состоит из следующих компонентов, которые должны располагаться в указанном порядке:7177181. Символ `'%'`, обозначающий начало спецификатора.7192. Ключ отображения (необязательно), состоящий из последовательности символов в круглых скобках (например, `(somename)`).7203. Флаги преобразования (необязательно), влияющие на результат для некоторых типов преобразования.7214. Минимальная ширина поля (необязательно). Если указана как `'*'` (звёздочка), то фактическая ширина берётся из следующего элемента кортежа в *values*, а преобразуемый объект следует после минимальной ширины поля и необязательной точности.7225. Точность (необязательно) задаётся через `'.'` (точку) и следующее за ней значение точности. Если указана как `'*'` (звёздочка), то фактическая ширина считывается из следующего элемента кортежа *values*, а преобразуемое значение следует после точности.7236. Модификатор длины (необязательно).7247. Тип преобразования.725726Когда правый аргумент является словарём (или другим типом отображения), форматы в строке *должны* включать ключ отображения в скобках, указывающий на этот словарь, вставленный сразу после символа `'%'`. Ключ отображения выбирает значение для форматирования из отображения. Например:727728```python729>>> print '%(language)s has %(number)03d quote types.' % \730...       {"language": "Python", "number": 2}731Python has 002 quote types.732```733734В этом случае в формате не должно быть спецификаторов `*` (поскольку они требуют последовательного списка параметров).735736Символы флагов преобразования:737738| Флаг | Значение |739| --- | --- |740| `'#'` | Преобразование значения будет использовать «альтернативную форму» (определённую ниже). |741| `'0'` | Для числовых значений преобразование будет дополняться нулями. |742| `'-'` | Преобразованное значение выравнивается по левому краю (переопределяет преобразование `'0'`, если указаны оба). |743| `' '` | (пробел) Перед положительным числом (или пустой строкой), полученным в результате знакового преобразования, следует оставлять пробел. |744| `'+'` | Знак (`'+'` или `'-'`) будет предшествовать преобразованию (переопределяет флаг «пробел»). |745746Модификатор длины (`h`, `l` или `L`) может присутствовать, но игнорируется, поскольку он не нужен для Python – так, например, `%ld` идентично `%d`.747748Типы преобразования:749750| Преобразование | Значение | Примечания |751| --- | --- | --- |752| `'d'` | Десятичное целое со знаком. |  |753| `'i'` | Десятичное целое со знаком. |  |754| `'o'` | Восьмеричное значение со знаком. | (1) |755| `'u'` | Устаревший тип – идентичен `'d'`. | (7) |756| `'x'` | Шестнадцатеричное со знаком (строчные буквы). | (2) |757| `'X'` | Шестнадцатеричное со знаком (заглавные буквы). | (2) |758| `'e'` | Экспоненциальный формат чисел с плавающей точкой (строчные буквы). | (3) |759| `'E'` | Экспоненциальный формат чисел с плавающей точкой (заглавные буквы). | (3) |760| `'f'` | Десятичный формат чисел с плавающей точкой. | (3) |761| `'F'` | Десятичный формат чисел с плавающей точкой. | (3) |762| `'g'` | Формат чисел с плавающей точкой. Использует экспоненциальный формат со строчными буквами, если показатель степени меньше −4 или не меньше точности, в противном случае – десятичный формат. | (4) |763| `'G'` | Формат чисел с плавающей точкой. Использует экспоненциальный формат с заглавными буквами, если показатель степени меньше −4 или не меньше точности, в противном случае – десятичный формат. | (4) |764| `'c'` | Один символ (принимает целое число или строку из одного символа). |  |765| `'r'` | Строка (преобразует любой объект Python с помощью [repr()](https://python-all.ru/2.7/library/functions.html#func-repr)). | (5) |766| `'s'` | Строка (преобразует любой объект Python с помощью [`str()`](https://python-all.ru/2.7/library/functions.html#str)). | (6) |767| `'%'` | Ни один аргумент не преобразуется, результатом является символ `'%'` в итоговом выводе. |  |768769Примечания:7707711. Альтернативная форма приводит к вставке ведущего нуля (`'0'`) между левым заполнением и форматированным числом, если первый символ результата ещё не является нулём.7722. Альтернативная форма вставляет перед первой цифрой ведущий `'0x'` или `'0X'` (в зависимости от того, использовался ли формат `'x'` или `'X'`).7733. Альтернативная форма всегда включает десятичную точку в результат, даже если после неё нет цифр.774775   Точность определяет количество цифр после десятичной точки; по умолчанию – 6.7764. Альтернативная форма всегда включает десятичную точку в результат, а конечные нули не удаляются, как это было бы в противном случае.777778   Точность определяет количество значащих цифр до и после десятичной точки; по умолчанию – 6.7795. Преобразование `%r` появилось в Python 2.0.780781   Точность определяет максимальное количество используемых символов.7826. Если переданный объект или формат является строкой [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode), результирующая строка также будет [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode).783784   Точность определяет максимальное количество используемых символов.7857. См. [**PEP 237**](https://python-all.ru/2.7/library/stdtypes.html).786787Поскольку строки Python имеют явную длину, преобразования `%s` не предполагают, что `'\0'` является концом строки.788789Изменено в версии 2.7: Преобразования `%f` для чисел, чьё абсолютное значение превышает 1e50, больше не заменяются преобразованиями `%g`.790791Дополнительные строковые операции определены в стандартных модулях [`string`](https://python-all.ru/2.7/library/string.html#module-string) и [`re`](https://python-all.ru/2.7/library/re.html#module-re).792793### 5.6.3. Тип XRange794795Тип [`xrange`](https://python-all.ru/2.7/library/functions.html#xrange) является неизменяемой последовательностью, которая обычно используется для циклов. Преимущество типа [`xrange`](https://python-all.ru/2.7/library/functions.html#xrange) в том, что объект [`xrange`](https://python-all.ru/2.7/library/functions.html#xrange) всегда занимает один и тот же объём памяти, независимо от размера диапазона, который он представляет. Постоянных преимуществ в производительности нет.796797Объекты XRange обладают очень небольшим набором возможностей: они поддерживают только индексацию, итерацию и функцию [`len()`](https://python-all.ru/2.7/library/functions.html#len).798799### 5.6.4. Изменяемые типы последовательностей800801Объекты списков и [`bytearray`](https://python-all.ru/2.7/library/functions.html#bytearray) поддерживают дополнительные операции, позволяющие изменять объект на месте. Другие изменяемые типы последовательностей (когда они будут добавлены в язык) также должны поддерживать эти операции. Строки и кортежи являются неизменяемыми типами последовательностей: такие объекты нельзя изменить после создания. Следующие операции определены для изменяемых типов последовательностей (где *x* – произвольный объект):802803| Операция | Результат | Примечания |804| --- | --- | --- |805| `s[i] = x` | элемент *i* из *s* заменяется на *x* |  |806| `s[i:j] = t` | срез *s* от *i* до *j* заменяется содержимым итерируемого объекта *t* |  |807| `del s[i:j]` | то же, что и `s[i:j] = []` |  |808| `s[i:j:k] = t` | элементы `s[i:j:k]` заменяются элементами из *t* | (1) |809| `del s[i:j:k]` | удаляет элементы `s[i:j:k]` из списка |  |810| `s.append(x)` | то же, что и `s[len(s):len(s)] = [x]` | (2) |811| `s.extend(t)` или `s += t` | в основном то же, что и `s[len(s):len(s)] = t` | (3) |812| `s *= n` | обновляет *s*, повторяя его содержимое *n* раз | (11) |813| `s.count(x)` | возвращает количество *i*, для которых `s[i] == x` |  |814| `s.index(x[, i[, j]])` | возвращает наименьшее *k*, такое что `s[k] == x` и `i <= k < j` | (4) |815| `s.insert(i, x)` | то же, что и `s[i:i] = [x]` | (5) |816| `s.pop([i])` | то же, что и `x = s[i]; del s[i]; return x` | (6) |817| `s.remove(x)` | то же, что и `del s[s.index(x)]` | (4) |818| `s.reverse()` | переворачивает элементы *s* на месте | (7) |819| `s.sort([cmp[, key[, reverse]]])` | сортирует элементы *s* на месте | (7)(8)(9)(10) |820821Примечания:8228231. *t* должна иметь ту же длину, что и заменяемый срез.8242. Реализация Python на C исторически принимала несколько параметров и неявно объединяла их в кортеж; в Python 2.0 это больше не работает. Использование этой «псевдовозможности» считается устаревшим начиная с Python 1.4.8253. *t* может быть любым итерируемым объектом.8264. Возникает исключение [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если *x* не найден в *s*. Когда отрицательный индекс передаётся в качестве второго или третьего параметра методу `index()`, к нему прибавляется длина списка, как для срезов. Если он всё ещё отрицателен, он усекается до нуля, как для срезов.827828   Изменено в версии 2.3: Ранее `index()` не имел аргументов для указания начальной и конечной позиций.8295. Когда отрицательный индекс передаётся в качестве первого параметра методу `insert()`, к нему прибавляется длина списка, как для срезов. Если он всё ещё отрицателен, он усекается до нуля, как для срезов.830831   Изменено в версии 2.3: Ранее все отрицательные индексы усекались до нуля.8326. Необязательный аргумент *i* метода `pop()` по умолчанию равен `-1`, так что по умолчанию удаляется и возвращается последний элемент.8337. Методы `sort()` и `reverse()` изменяют список на месте для экономии памяти при сортировке или реверсировании большого списка. Чтобы напомнить, что они работают через побочный эффект, они не возвращают отсортированный или реверсированный список.8348. Метод `sort()` принимает необязательные аргументы для управления сравнениями.835836   *cmp* задает пользовательскую функцию сравнения с двумя аргументами (элементами списка), которая должна возвращать отрицательное, нулевое или положительное число в зависимости от того, считается ли первый аргумент меньше, равным или больше второго аргумента: `cmp=lambda x,y: cmp(x.lower(), y.lower())`. Значение по умолчанию – `None`.837838   *key* задает функцию одного аргумента, используемую для извлечения ключа сравнения из каждого элемента списка: `key=str.lower`. Значение по умолчанию – `None`.839840   *reverse* – логическое значение. Если указано `True`, то элементы списка сортируются так, как если бы каждое сравнение было обратным.841842   В целом, процессы преобразования *key* и *reverse* работают гораздо быстрее, чем указание эквивалентной функции *cmp*. Это связано с тем, что *cmp* вызывается несколько раз для каждого элемента списка, тогда как *key* и *reverse* затрагивают каждый элемент только один раз. Используйте [`functools.cmp_to_key()`](https://python-all.ru/2.7/library/functools.html#functools.cmp_to_key) для преобразования функции *cmp* старого образца в функцию *key*.843844   Изменено в версии 2.3: Добавлена поддержка `None` как эквивалента опускания *cmp*.845846   Изменено в версии 2.4: Добавлена поддержка *key* и *reverse*.8479. Начиная с Python 2.3, метод `sort()` гарантированно является устойчивым. Сортировка называется устойчивой, если она гарантированно не меняет относительный порядок равных элементов – это полезно при сортировке в несколько проходов (например, сначала по отделу, затем по уровню зарплаты).84810. **Особенность реализации CPython:** Во время сортировки списка результат попытки изменить или даже просмотреть список не определен. Реализация на C в Python 2.3 и новее делает список пустым на время сортировки и возбуждает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если обнаруживает, что список был изменен во время сортировки.84911. Значение *n* – это целое число или объект, реализующий [`__index__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__index__). Нулевые и отрицательные значения *n* очищают последовательность. Элементы последовательности не копируются; на них ссылаются многократно, как объясняется для `s * n` в разделе [Типы последовательностей – str, unicode, list, tuple, bytearray, buffer, xrange](https://python-all.ru/2.7/library/stdtypes.html#typesseq).850851## 5.7. Типы множеств – [`set`](https://python-all.ru/2.7/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset)852853Объект *set* – это неупорядоченная коллекция уникальных [хешируемых](https://python-all.ru/2.7/glossary.html#term-hashable) объектов. Обычно используется для проверки принадлежности, удаления дубликатов из последовательности и выполнения математических операций, таких как пересечение, объединение, разность и симметричная разность. (О других контейнерах см. встроенные классы [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict), `list` и [`tuple`](https://python-all.ru/2.7/library/functions.html#tuple), а также модуль [`collections`](https://python-all.ru/2.7/library/collections.html#module-collections).)854855Новое в версии 2.4.856857Как и другие коллекции, множества поддерживают `x in set`, `len(set)` и `for x in set`. Будучи неупорядоченной коллекцией, множество не запоминает положение элементов или порядок вставки. Поэтому множества не поддерживают индексацию, срезы и другое поведение, свойственное последовательностям.858859В Python есть два встроенных типа множеств: [`set`](https://python-all.ru/2.7/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset). Тип [`set`](https://python-all.ru/2.7/library/stdtypes.html#set) изменяемый – его содержимое можно менять с помощью методов вроде `add()` и `remove()`. Поскольку он изменяемый, у него нет хеш-значения, поэтому его нельзя использовать ни в качестве ключа словаря, ни как элемент другого множества. Тип [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset) неизменяемый и [хешируемый](https://python-all.ru/2.7/glossary.html#term-hashable) – его содержимое нельзя изменить после создания; соответственно, его можно использовать как ключ словаря или как элемент другого множества.860861Начиная с Python 2.7, непустые множества (не frozensets) можно создавать, помещая список элементов, разделенных запятыми, в фигурные скобки, например: `{'jack', 'sjoerd'}`, в дополнение к конструктору [`set`](https://python-all.ru/2.7/library/stdtypes.html#set).862863Конструкторы обоих классов работают одинаково:864865#### `class set([iterable])`866867#### `class frozenset([iterable])`868869Возвращает новый объект set или frozenset, элементы которого берутся из *iterable*. Элементы множества должны быть [хэшируемыми](https://python-all.ru/2.7/glossary.html#term-hashable). Чтобы представлять множества множеств, внутренние множества должны быть [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset) объектами. Если *iterable* не указан, возвращается новое пустое множество.870871Экземпляры [`set`](https://python-all.ru/2.7/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset) предоставляют следующие операции:872873#### `len(s)`874875Возвращает количество элементов в множестве *s* (мощность *s*).876877#### `x in s`878879Проверяет принадлежность *x* множеству *s*.880881#### `x not in s`882883Проверяет отсутствие *x* в множестве *s*.884885#### `isdisjoint(other)`886887Возвращает `True`, если у множества нет общих элементов с *other*. Множества не пересекаются тогда и только тогда, когда их пересечение – пустое множество.888889Новое в версии 2.6.890891#### `issubset(other)`892893#### `set <= other`894895Проверяет, принадлежит ли каждый элемент множества множеству *other*.896897#### `set < other`898899Проверяет, является ли множество строгим подмножеством *other*, то есть `set <= other and set != other`.900901#### `issuperset(other)`902903#### `set >= other`904905Проверяет, принадлежит ли каждый элемент *other* множеству.906907#### `set > other`908909Проверяет, является ли множество строгим надмножеством *other*, то есть `set >= other and set != other`.910911#### `union(*others)`912913#### `set | other | ...`914915Возвращает новое множество, содержащее элементы из исходного множества и всех остальных.916917Изменено в версии 2.6: Принимает несколько входных итерабельных объектов.918919#### `intersection(*others)`920921#### `set & other & ...`922923Возвращает новое множество, содержащее элементы, общие для исходного множества и всех остальных.924925Изменено в версии 2.6: Принимает несколько входных итерабельных объектов.926927#### `difference(*others)`928929#### `set - other - ...`930931Возвращает новое множество, содержащее элементы исходного множества, которых нет в других.932933Изменено в версии 2.6: Принимает несколько входных итерабельных объектов.934935#### `symmetric_difference(other)`936937#### `set ^ other`938939Возвращает новое множество, содержащее элементы, которые есть либо в исходном множестве, либо в *other*, но не в обоих.940941#### `copy()`942943Возвращает поверхностную копию множества.944945Замечание: версии методов [`union()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.union), [`intersection()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.intersection), [`difference()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.difference), [`symmetric_difference()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.symmetric_difference), [`issubset()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.issubset) и [`issuperset()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.issuperset) без операторов принимают любой итерируемый объект в качестве аргумента. В отличие от них, их операторные аналоги требуют, чтобы аргументы были множествами. Это исключает подверженные ошибкам конструкции вроде `set('abc') & 'cbs'` в пользу более читаемой `set('abc').intersection('cbs')`.946947И [`set`](https://python-all.ru/2.7/library/stdtypes.html#set), и [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset) поддерживают сравнение множеств. Два множества равны тогда и только тогда, когда каждый элемент одного содержится в другом (каждое является подмножеством другого). Множество меньше другого тогда и только тогда, когда первое является собственным подмножеством второго (является подмножеством, но не равным). Множество больше другого тогда и только тогда, когда первое является собственным надмножеством второго (является надмножеством, но не равным).948949Экземпляры [`set`](https://python-all.ru/2.7/library/stdtypes.html#set) сравниваются с экземплярами [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset) на основе их элементов. Например, `set('abc') == frozenset('abc')` возвращает `True`, и то же самое делает `set('abc') in set([frozenset('abc')])`.950951Сравнения на подмножество и равенство не обобщаются до функции полного упорядочения. Например, любые два непустых непересекающихся множества не равны и не являются подмножествами друг друга, поэтому *все* из следующих возвращают `False`: `a<b`, `a==b` или `a>b`. Соответственно, множества не реализуют метод [`__cmp__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__cmp__).952953Поскольку множества определяют лишь частичное упорядочение (отношения подмножеств), результат метода `list.sort()` для списков множеств не определён.954955Элементы множества, как и ключи словаря, должны быть [хэшируемыми](https://python-all.ru/2.7/glossary.html#term-hashable).956957Бинарные операции, в которых смешиваются экземпляры [`set`](https://python-all.ru/2.7/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset), возвращают тип первого операнда. Например: `frozenset('ab') | set('bc')` возвращает экземпляр [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset).958959В следующей таблице перечислены операции, доступные для [`set`](https://python-all.ru/2.7/library/stdtypes.html#set), которые не применимы к неизменяемым экземплярам [`frozenset`](https://python-all.ru/2.7/library/stdtypes.html#frozenset):960961#### `update(*others)`962963#### `set |= other | ...`964965Обновляет множество, добавляя элементы из всех других.966967Изменено в версии 2.6: Принимает несколько входных итерабельных объектов.968969#### `intersection_update(*others)`970971#### `set &= other & ...`972973Обновляет множество, оставляя только те элементы, которые есть в нём и во всех других.974975Изменено в версии 2.6: Принимает несколько входных итерабельных объектов.976977#### `difference_update(*others)`978979#### `set -= other | ...`980981Обновляет множество, удаляя элементы, найденные в других.982983Изменено в версии 2.6: Принимает несколько входных итерабельных объектов.984985#### `symmetric_difference_update(other)`986987#### `set ^= other`988989Обновляет множество, оставляя только элементы, которые есть в одном из множеств, но не в обоих.990991#### `add(elem)`992993Добавляет элемент *elem* в множество.994995#### `remove(elem)`996997Удаляет элемент *elem* из множества. Вызывает [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError), если *elem* отсутствует в множестве.998999#### `discard(elem)`10001001Удаляет элемент *elem* из множества, если он присутствует.10021003#### `pop()`10041005Удаляет и возвращает произвольный элемент множества. Вызывает [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError), если множество пусто.10061007#### `clear()`10081009Удаляет все элементы из множества.10101011Обратите внимание: не-операторные версии методов [`update()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.update), [`intersection_update()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.intersection_update), [`difference_update()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.difference_update) и [`symmetric_difference_update()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.symmetric_difference_update) принимают любой итерируемый объект в качестве аргумента.10121013Примечание: аргумент *elem* для методов [`__contains__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__contains__), [`remove()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.remove) и [`discard()`](https://python-all.ru/2.7/library/stdtypes.html#frozenset.discard) может быть множеством. Для поддержки поиска эквивалентного замороженного множества создается временное множество из *elem*.10141015> **См. также**1016>1017> **[Сравнение со встроенными типами множеств](https://python-all.ru/2.7/library/sets.html#comparison-to-builtin-set)**1018>1019> Различия между модулем [`sets`](https://python-all.ru/2.7/library/sets.html#module-sets) и встроенными типами множеств.10201021## 5.8. Типы отображений – [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict)10221023Объект [отображение](https://python-all.ru/2.7/glossary.html#term-mapping) сопоставляет [хешируемые](https://python-all.ru/2.7/glossary.html#term-hashable) значения с произвольными объектами. Отображения – изменяемые объекты. В настоящее время существует только один стандартный тип отображения – *словарь*. (О других контейнерах см. встроенные классы `list`, [`set`](https://python-all.ru/2.7/library/stdtypes.html#set) и [`tuple`](https://python-all.ru/2.7/library/functions.html#tuple), а также модуль [`collections`](https://python-all.ru/2.7/library/collections.html#module-collections).)10241025Ключи словаря могут быть *почти* любыми значениями. Значения, которые не являются [хэшируемыми](https://python-all.ru/2.7/glossary.html#term-hashable), то есть содержат списки, словари или другие изменяемые типы (которые сравниваются по значению, а не по идентичности объекта), не могут использоваться в качестве ключей. Числовые типы, используемые в качестве ключей, подчиняются обычным правилам числового сравнения: если два числа равны (например, `1` и `1.0`), то их можно взаимозаменяемо использовать для индексации одной и той же записи словаря. (Однако имейте в виду, что поскольку компьютеры хранят числа с плавающей запятой как приближенные значения, обычно неразумно использовать их в качестве ключей словаря.)10261027Словари можно создать, поместив разделённый запятыми список пар `key: value` в фигурные скобки, например: `{'jack': 4098, 'sjoerd': 4127}` или `{4098: 'jack', 4127: 'sjoerd'}`, либо с помощью конструктора [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict).10281029#### `class dict(**kwarg)`10301031#### `class dict(mapping, **kwarg)`10321033#### `class dict(iterable, **kwarg)`10341035Возвращает новый словарь, инициализированный из необязательного позиционного аргумента и, возможно, пустого набора именованных аргументов.10361037Если позиционный аргумент не указан, создаётся пустой словарь. Если позиционный аргумент указан и является объектом отображения (mapping), создаётся словарь с теми же парами ключ-значение, что и у объекта отображения. В противном случае позиционный аргумент должен быть [итерируемым объектом](https://python-all.ru/2.7/glossary.html#term-iterable). Каждый элемент итерируемого объекта сам должен быть итерируемым объектом, содержащим ровно два объекта. Первый объект каждого элемента становится ключом в новом словаре, а второй – соответствующим значением. Если ключ встречается более одного раза, последнее значение для этого ключа становится соответствующим значением в новом словаре.10381039Если переданы именованные аргументы, они и их значения добавляются в словарь, созданный из позиционного аргумента. Если добавляемый ключ уже присутствует, значение из именованного аргумента заменяет значение из позиционного аргумента.10401041В качестве иллюстрации следующие примеры возвращают словарь, равный `{"one": 1, "two": 2, "three": 3}`:10421043```python1044>>> a = dict(one=1, two=2, three=3)1045>>> b = {'one': 1, 'two': 2, 'three': 3}1046>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))1047>>> d = dict([('two', 2), ('one', 1), ('three', 3)])1048>>> e = dict({'three': 3, 'one': 1, 'two': 2})1049>>> a == b == c == d == e1050True1051```10521053Передача именованных аргументов, как в первом примере, работает только для ключей, являющихся допустимыми идентификаторами Python. В противном случае можно использовать любые допустимые ключи.10541055Новое в версии 2.2.10561057Изменено в версии 2.3: Добавлена поддержка создания словаря из именованных аргументов.10581059Вот операции, которые поддерживают словари (и, следовательно, должны поддерживать пользовательские типы отображений):10601061#### `len(d)`10621063Возвращает количество элементов в словаре *d*.10641065#### `d[key]`10661067Возвращает элемент *d* с ключом *key*. Возбуждает [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError), если *key* отсутствует в отображении.10681069Если подкласс dict определяет метод [`__missing__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__missing__), а *key* отсутствует, операция `d[key]` вызывает этот метод с ключом *key* в качестве аргумента. Затем операция `d[key]` возвращает или возбуждает результат вызова `__missing__(key)`. Никакие другие операции или методы не вызывают [`__missing__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__missing__). Если [`__missing__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__missing__) не определён, возбуждается [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError). [`__missing__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__missing__) должен быть методом; он не может быть переменной экземпляра:10701071```python1072>>> class Counter(dict):1073...     def __missing__(self, key):1074...         return 01075>>> c = Counter()1076>>> c['red']107701078>>> c['red'] += 11079>>> c['red']108011081```10821083В примере выше показана часть реализации [`collections.Counter`](https://python-all.ru/2.7/library/collections.html#collections.Counter). Для [`collections.defaultdict`](https://python-all.ru/2.7/library/collections.html#collections.defaultdict) используется другой метод `__missing__`.10841085Новое в версии 2.5: Распознавание методов \_\_missing\_\_ подклассов dict.10861087#### `d[key] = value`10881089Устанавливает `d[key]` в значение *value*.10901091#### `del d[key]`10921093Удаляет `d[key]` из *d*. Вызывает [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError), если *key* отсутствует в отображении.10941095#### `key in d`10961097Возвращает `True`, если *d* содержит ключ *key*, иначе `False`.10981099Новое в версии 2.2.11001101#### `key not in d`11021103Эквивалентно `not key in d`.11041105Новое в версии 2.2.11061107#### `iter(d)`11081109Возвращает итератор по ключам словаря. Это краткая форма записи для [`iterkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.iterkeys).11101111#### `clear()`11121113Удаляет все элементы из словаря.11141115#### `copy()`11161117Возвращает поверхностную копию словаря.11181119#### `fromkeys(seq[, value])`11201121Создаёт новый словарь, ключи которого берутся из *seq*, а значения устанавливаются равными *value*.11221123[`fromkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.fromkeys) – это метод класса, возвращающий новый словарь. *value* по умолчанию равен `None`.11241125Новое в версии 2.3.11261127#### `get(key[, default])`11281129Возвращает значение для *key*, если *key* присутствует в словаре, иначе *default*. Если *default* не указан, по умолчанию принимается `None`, поэтому этот метод никогда не вызывает исключение [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError).11301131#### `has_key(key)`11321133Проверяет наличие *key* в словаре. [`has_key()`](https://python-all.ru/2.7/library/stdtypes.html#dict.has_key) устарело в пользу `key in d`.11341135#### `items()`11361137Возвращает копию списка пар `(key, value)` словаря.11381139**Особенности реализации CPython:** Ключи и значения перечисляются в произвольном порядке, который не является случайным, различается в разных реализациях Python и зависит от истории вставок и удалений в словаре.11401141Если [`items()`](https://python-all.ru/2.7/library/stdtypes.html#dict.items), [`keys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.keys), [`values()`](https://python-all.ru/2.7/library/stdtypes.html#dict.values), [`iteritems()`](https://python-all.ru/2.7/library/stdtypes.html#dict.iteritems), [`iterkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.iterkeys) и [`itervalues()`](https://python-all.ru/2.7/library/stdtypes.html#dict.itervalues) вызываются без промежуточных изменений словаря, списки будут напрямую соответствовать друг другу. Это позволяет создавать пары `(value, key)` с помощью [`zip()`](https://python-all.ru/2.7/library/functions.html#zip): `pairs = zip(d.values(), d.keys())`. То же отношение справедливо для методов [`iterkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.iterkeys) и [`itervalues()`](https://python-all.ru/2.7/library/stdtypes.html#dict.itervalues): `pairs = zip(d.itervalues(), d.iterkeys())` предоставляет то же значение для `pairs`. Другой способ создать тот же список – `pairs = [(v, k) for (k, v) in d.iteritems()]`.11421143#### `iteritems()`11441145Возвращает итератор по парам `(key, value)` словаря. См. примечание к [`dict.items()`](https://python-all.ru/2.7/library/stdtypes.html#dict.items).11461147Использование [`iteritems()`](https://python-all.ru/2.7/library/stdtypes.html#dict.iteritems) при добавлении или удалении записей в словаре может вызвать [`RuntimeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.RuntimeError) или не позволить перебрать все записи.11481149Новое в версии 2.2.11501151#### `iterkeys()`11521153Возвращает итератор по ключам словаря. См. примечание к [`dict.items()`](https://python-all.ru/2.7/library/stdtypes.html#dict.items).11541155Использование [`iterkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.iterkeys) при добавлении или удалении записей в словаре может вызвать [`RuntimeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.RuntimeError) или не позволить перебрать все записи.11561157Новое в версии 2.2.11581159#### `itervalues()`11601161Возвращает итератор по значениям словаря. См. примечание к [`dict.items()`](https://python-all.ru/2.7/library/stdtypes.html#dict.items).11621163Использование [`itervalues()`](https://python-all.ru/2.7/library/stdtypes.html#dict.itervalues) при добавлении или удалении записей в словаре может вызвать [`RuntimeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.RuntimeError) или не позволить перебрать все записи.11641165Новое в версии 2.2.11661167#### `keys()`11681169Возвращает копию списка ключей словаря. См. примечание к [`dict.items()`](https://python-all.ru/2.7/library/stdtypes.html#dict.items).11701171#### `pop(key[, default])`11721173Если *key* присутствует в словаре, удаляет его и возвращает значение, иначе возвращает *default*. Если *default* не указан и *key* отсутствует в словаре, возбуждается [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError).11741175Новое в версии 2.3.11761177#### `popitem()`11781179Удаляет и возвращает произвольную пару `(key, value)` из словаря.11801181[`popitem()`](https://python-all.ru/2.7/library/stdtypes.html#dict.popitem) полезен для разрушающего обхода словаря, как часто используется в алгоритмах над множествами. Если словарь пуст, вызов [`popitem()`](https://python-all.ru/2.7/library/stdtypes.html#dict.popitem) вызывает исключение [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError).11821183#### `setdefault(key[, default])`11841185Если *key* есть в словаре, возвращает его значение. Если нет, вставляет *key* со значением *default* и возвращает *default*. *default* по умолчанию равен `None`.11861187#### `update([other])`11881189Обновляет словарь парами ключ/значение из *other*, перезаписывая существующие ключи. Возвращает `None`.11901191[`update()`](https://python-all.ru/2.7/library/stdtypes.html#dict.update) принимает либо другой объект словаря, либо итерируемый объект пар ключ/значение (в виде кортежей или других итерируемых объектов длиной два). Если указаны именованные аргументы, словарь затем обновляется этими парами ключ/значение: `d.update(red=1, blue=2)`.11921193Изменено в версии 2.4: Разрешено передавать итерируемый объект пар ключ/значение, а также именованные аргументы.11941195#### `values()`11961197Возвращает копию списка значений словаря. См. примечание к [`dict.items()`](https://python-all.ru/2.7/library/stdtypes.html#dict.items).11981199#### `viewitems()`12001201Возвращает новое представление элементов словаря (пары `(key, value)`). См. ниже документацию объектов представления.12021203Новое в версии 2.7.12041205#### `viewkeys()`12061207Возвращает новое представление ключей словаря. См. ниже документацию объектов представления.12081209Новое в версии 2.7.12101211#### `viewvalues()`12121213Возвращает новое представление значений словаря. См. ниже документацию объектов представления.12141215Новое в версии 2.7.12161217Словари считаются равными тогда и только тогда, когда они содержат одни и те же пары `(key, value)`.12181219### 5.8.1. Объекты представления словаря12201221Объекты, возвращаемые [`dict.viewkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.viewkeys), [`dict.viewvalues()`](https://python-all.ru/2.7/library/stdtypes.html#dict.viewvalues) и [`dict.viewitems()`](https://python-all.ru/2.7/library/stdtypes.html#dict.viewitems), являются *объектами-представлениями*. Они предоставляют динамическое представление записей словаря, то есть при изменении словаря представление отражает эти изменения.12221223Представления словаря можно обходить для получения соответствующих данных, а также они поддерживают проверку принадлежности:12241225#### `len(dictview)`12261227Возвращает количество записей в словаре.12281229#### `iter(dictview)`12301231Возвращает итератор по ключам, значениям или элементам (представленным в виде кортежей `(key, value)`) в словаре.12321233Ключи и значения перебираются в произвольном порядке, который не является случайным, отличается в разных реализациях Python и зависит от истории вставок и удалений словаря. Если представления ключей, значений и элементов перебираются без промежуточных изменений словаря, порядок элементов будет напрямую соответствовать друг другу. Это позволяет создавать пары `(value, key)` с помощью [`zip()`](https://python-all.ru/2.7/library/functions.html#zip): `pairs = zip(d.values(), d.keys())`. Другой способ создать тот же список – `pairs = [(v, k) for (k, v) in d.items()]`.12341235Обход представлений во время добавления или удаления записей из словаря может вызвать [`RuntimeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.RuntimeError) или не позволить обойти все записи.12361237#### `x in dictview`12381239Возвращает `True`, если *x* находится в ключах, значениях или элементах (items) базового словаря (в последнем случае *x* должен быть кортежем `(key, value)`).12401241Представления ключей (keys views) подобны множествам, так как их записи уникальны и хешируемы. Если все значения хешируемы, так что пары (ключ, значение) уникальны и хешируемы, то представление элементов (items view) также подобно множеству. (Представления значений не считаются подобными множеству, так как записи обычно не уникальны.) Тогда доступны следующие операции над множествами (под «other» подразумевается другое представление или множество):12421243#### `dictview & other`12441245Возвращает пересечение представления словаря и другого объекта в виде нового множества.12461247#### `dictview | other`12481249Возвращает объединение представления словаря и другого объекта в виде нового множества.12501251#### `dictview - other`12521253Возвращает разность между представлением словаря и другим объектом (все элементы в *dictview*, которых нет в *other*) в виде нового множества.12541255#### `dictview ^ other`12561257Возвращает симметрическую разность (все элементы, находящиеся либо в *dictview*, либо в *other*, но не в обоих) представления словаря и другого объекта в виде нового множества.12581259Пример использования представления словаря:12601261```python1262>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}1263>>> keys = dishes.viewkeys()1264>>> values = dishes.viewvalues()12651266>>> # итерация1267>>> n = 01268>>> for val in values:1269...     n += val1270>>> print(n)127150412721273>>> # ключи и значения перебираются в одном и том же порядке1274>>> list(keys)1275['eggs', 'bacon', 'sausage', 'spam']1276>>> list(values)1277[2, 1, 1, 500]12781279>>> # объекты представления динамичны и отражают изменения словаря1280>>> del dishes['eggs']1281>>> del dishes['sausage']1282>>> list(keys)1283['spam', 'bacon']12841285>>> # операции над множествами1286>>> keys & {'eggs', 'bacon', 'salad'}1287{'bacon'}1288```12891290## 5.9. Файловые объекты12911292Файловые объекты реализованы с помощью пакета `stdio` языка C и могут быть созданы с помощью встроенной функции [`open()`](https://python-all.ru/2.7/library/functions.html#open). Файловые объекты также возвращаются некоторыми другими встроенными функциями и методами, такими как [`os.popen()`](https://python-all.ru/2.7/library/os.html#os.popen) и [`os.fdopen()`](https://python-all.ru/2.7/library/os.html#os.fdopen), а также методом `makefile()` объектов сокетов. Временные файлы можно создавать с помощью модуля [`tempfile`](https://python-all.ru/2.7/library/tempfile.html#module-tempfile), а высокоуровневые файловые операции, такие как копирование, перемещение и удаление файлов и каталогов, можно выполнять с помощью модуля [`shutil`](https://python-all.ru/2.7/library/shutil.html#module-shutil).12931294Когда файловая операция завершается ошибкой по причине, связанной с вводом-выводом, возбуждается исключение [`IOError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IOError). Сюда входят ситуации, когда операция не определена по какой-либо причине, например, `seek()` на устройстве tty или запись в файл, открытый для чтения.12951296Файлы имеют следующие методы:12971298#### `file.close()`12991300Закрывает файл. Закрытый файл нельзя больше читать или записывать. Любая операция, требующая, чтобы файл был открыт, возбудит [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError) после закрытия файла. Допускается вызов [`close()`](https://python-all.ru/2.7/library/stdtypes.html#file.close) более одного раза.13011302Начиная с Python 2.5, можно избежать явного вызова этого метода, если использовать оператор [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with). Например, следующий код автоматически закроет *f* при выходе из блока [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with):13031304```python1305from __future__ import with_statement # Это не требуется в Python 2.613061307with open("hello.txt") as f:1308    for line in f:1309        print line,1310```13111312В более старых версиях Python для достижения того же эффекта приходилось делать так:13131314```python1315f = open("hello.txt")1316try:1317    for line in f:1318        print line,1319finally:1320    f.close()1321```13221323> **Примечание**1324>1325> Не все «файлоподобные» типы в Python поддерживают использование в качестве менеджера контекста для оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with). Если ваш код предназначен для работы с любым файлоподобным объектом, можно использовать функцию [`contextlib.closing()`](https://python-all.ru/2.7/library/contextlib.html#contextlib.closing) вместо непосредственного использования объекта.13261327#### `file.flush()`13281329Сбрасывает внутренний буфер, как `fflush()` из `stdio`. На некоторых файлоподобных объектах это может быть пустой операцией.13301331> **Примечание**1332>1333> [`flush()`](https://python-all.ru/2.7/library/stdtypes.html#file.flush) не обязательно записывает данные файла на диск. Используйте [`flush()`](https://python-all.ru/2.7/library/stdtypes.html#file.flush) с последующим [`os.fsync()`](https://python-all.ru/2.7/library/os.html#os.fsync), чтобы гарантировать это поведение.13341335#### `file.fileno()`13361337Возвращает целочисленный «файловый дескриптор», используемый нижележащей реализацией для запроса операций ввода-вывода у операционной системы. Это может быть полезно для других низкоуровневых интерфейсов, использующих файловые дескрипторы, таких как модуль [`fcntl`](https://python-all.ru/2.7/library/fcntl.html#module-fcntl) или [`os.read()`](https://python-all.ru/2.7/library/os.html#os.read) и аналоги.13381339> **Примечание**1340>1341> Файлоподобные объекты, у которых нет реального файлового дескриптора, *не* должны предоставлять этот метод!13421343#### `file.isatty()`13441345Возвращает `True`, если файл подключён к tty-устройству (или подобному), иначе `False`.13461347> **Примечание**1348>1349> Если файлоподобный объект не связан с реальным файлом, этот метод *не* следует реализовывать.13501351#### `file.next()`13521353Файловый объект является собственным итератором; например, `iter(f)` возвращает *f* (если только *f* не закрыт). Когда файл используется как итератор, обычно в цикле [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for) (например, `for line in f: print line.strip()`), многократно вызывается метод [`next()`](https://python-all.ru/2.7/library/stdtypes.html#file.next). Этот метод возвращает следующую строку ввода или возбуждает [`StopIteration`](https://python-all.ru/2.7/library/exceptions.html#exceptions.StopIteration) при достижении EOF, если файл открыт для чтения (поведение не определено, если файл открыт для записи). Чтобы сделать цикл [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for) наиболее эффективным способом перебора строк файла (очень распространённая операция), метод [`next()`](https://python-all.ru/2.7/library/stdtypes.html#file.next) использует скрытый буфер упреждающего чтения. Из-за использования такого буфера комбинирование [`next()`](https://python-all.ru/2.7/library/stdtypes.html#file.next) с другими методами файла (например, [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline)) работает неправильно. Однако использование [`seek()`](https://python-all.ru/2.7/library/stdtypes.html#file.seek) для перемещения в абсолютную позицию сбрасывает буфер упреждающего чтения.13541355Новое в версии 2.3.13561357#### `file.read([size])`13581359Читает не более *size* байт из файла (меньше, если при чтении EOF встречен до получения *size* байт). Если аргумент *size* отрицателен или опущен, читаются все данные до EOF. Байты возвращаются в виде строкового объекта. Пустая строка возвращается, если EOF встречается сразу. (Для некоторых файлов, например tty, имеет смысл продолжать чтение после EOF.) Обратите внимание, что этот метод может вызывать нижележащую C-функцию `fread()` более одного раза, чтобы получить как можно ближе к *size* байт. Также заметьте, что в неблокирующем режиме может быть возвращено меньше данных, чем запрошено, даже если параметр *size* не был задан.13601361> **Примечание**1362>1363> Эта функция – просто обёртка для нижележащей C-функции `fread()` и будет вести себя так же в угловых случаях, например, кэшируется ли значение EOF.13641365#### `file.readline([size])`13661367Читает одну целую строку из файла. Завершающий символ новой строки сохраняется в строке (но может отсутствовать, если файл заканчивается неполной строкой). [6](https://python-all.ru/2.7/library/stdtypes.html#id17) Если аргумент *size* присутствует и неотрицателен, он указывает максимальное количество байт (включая завершающий перевод строки), и может быть возвращена неполная строка. Когда *size* не равен 0, пустая строка возвращается *только*, если EOF встречается сразу.13681369> **Примечание**1370>1371> В отличие от `stdio` метода `fgets()`, возвращаемая строка содержит нулевые символы (`'\0'`), если они встречались во входных данных.13721373#### `file.readlines([sizehint])`13741375Читает до EOF с помощью [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline) и возвращает список, содержащий прочитанные таким образом строки. Если присутствует необязательный аргумент *sizehint*, то вместо чтения до EOF читаются целые строки общим объёмом приблизительно *sizehint* байт (возможно, с округлением до размера внутреннего буфера). Объекты, реализующие файлоподобный интерфейс, могут игнорировать *sizehint*, если его невозможно реализовать или невозможно реализовать эффективно.13761377#### `file.xreadlines()`13781379Этот метод возвращает то же самое, что и `iter(f)`.13801381Новое в версии 2.1.13821383Устарело с версии 2.3: Используйте `for line in file` вместо.13841385#### `file.seek(offset[, whence])`13861387Устанавливает текущую позицию файла, как `stdio` метод `fseek()`. Аргумент *whence* необязателен и по умолчанию равен `os.SEEK_SET` или `0` (абсолютное позиционирование); другие значения: `os.SEEK_CUR` или `1` (позиционирование относительно текущей позиции) и `os.SEEK_END` или `2` (позиционирование относительно конца файла). Возвращаемого значения нет.13881389Например, `f.seek(2, os.SEEK_CUR)` продвигает позицию на два, а `f.seek(-3, os.SEEK_END)` устанавливает позицию на третью с конца.13901391Обратите внимание: если файл открыт для добавления (режим `'a'` или `'a+'`), любые операции [`seek()`](https://python-all.ru/2.7/library/stdtypes.html#file.seek) будут отменены при следующей записи. Если файл открыт только для записи в режиме добавления (режим `'a'`), этот метод по сути ничего не делает, но он остаётся полезным для файлов, открытых в режиме добавления с возможностью чтения (режим `'a+'`). Если файл открыт в текстовом режиме (без `'b'`), допустимы только смещения, возвращаемые [`tell()`](https://python-all.ru/2.7/library/stdtypes.html#file.tell). Использование других смещений приводит к неопределённому поведению.13921393Обратите внимание, что не все файловые объекты допускают перемещение (seekable).13941395Изменено в версии 2.6: Передача чисел с плавающей запятой в качестве смещения устарела.13961397#### `file.tell()`13981399Возвращает текущую позицию файла, как `stdio` метод `ftell()`.14001401> **Примечание**1402>1403> В Windows [`tell()`](https://python-all.ru/2.7/library/stdtypes.html#file.tell) может возвращать недопустимые значения (после `fgets()`) при чтении файлов с переводами строк в стиле Unix. Используйте двоичный режим (`'rb'`), чтобы обойти эту проблему.14041405#### `file.truncate([size])`14061407Урезает размер файла. Если указан необязательный аргумент *size*, файл урезается (не более) до этого размера. По умолчанию размер равен текущей позиции. Текущая позиция файла не меняется. Обратите внимание: если указанный размер превышает текущий размер файла, результат зависит от платформы: возможны варианты, что файл останется без изменений, увеличится до указанного размера (как будто заполнен нулями) или увеличится до указанного размера с неопределённым новым содержимым. Доступность: Windows, многие варианты Unix.14081409#### `file.write(str)`14101411Записывает строку в файл. Возвращаемого значения нет. Из-за буферизации строка может фактически не появиться в файле до вызова метода [`flush()`](https://python-all.ru/2.7/library/stdtypes.html#file.flush) или [`close()`](https://python-all.ru/2.7/library/stdtypes.html#file.close).14121413#### `file.writelines(sequence)`14141415Записывает последовательность строк в файл. Последовательность может быть любым итерируемым объектом, порождающим строки, обычно списком строк. Возвращаемого значения нет. (Название задумано так, чтобы соответствовать [`readlines()`](https://python-all.ru/2.7/library/stdtypes.html#file.readlines); [`writelines()`](https://python-all.ru/2.7/library/stdtypes.html#file.writelines) не добавляет разделители строк.)14161417Файлы поддерживают протокол итератора. Каждая итерация возвращает тот же результат, что и [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline), и итерация завершается, когда метод [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline) возвращает пустую строку.14181419Файловые объекты также предоставляют ряд других интересных атрибутов. Они не обязательны для файлоподобных объектов, но должны быть реализованы, если имеют смысл для конкретного объекта.14201421#### `file.closed`14221423bool, указывающий текущее состояние файлового объекта. Это атрибут только для чтения; метод [`close()`](https://python-all.ru/2.7/library/stdtypes.html#file.close) изменяет значение. Он может быть недоступен на всех файлоподобных объектах.14241425#### `file.encoding`14261427Кодировка, которую использует этот файл. Когда строки Unicode записываются в файл, они преобразуются в байтовые строки с использованием этой кодировки. Кроме того, когда файл подключён к терминалу, этот атрибут содержит кодировку, которую терминал, вероятно, использует (эта информация может быть неверной, если пользователь неправильно настроил терминал). Атрибут только для чтения и может отсутствовать на всех файлоподобных объектах. Он также может быть `None`, в этом случае файл использует системную кодировку по умолчанию для преобразования строк Unicode.14281429Новое в версии 2.3.14301431#### `file.errors`14321433Обработчик ошибок Unicode, используемый совместно с кодировкой.14341435Новое в версии 2.6.14361437#### `file.mode`14381439Режим ввода-вывода для файла. Если файл был создан с помощью встроенной функции [`open()`](https://python-all.ru/2.7/library/functions.html#open), это будет значение параметра *mode*. Это атрибут только для чтения и может отсутствовать на всех файлоподобных объектах.14401441#### `file.name`14421443Если файловый объект был создан с помощью [`open()`](https://python-all.ru/2.7/library/functions.html#open) – имя файла. В противном случае – некоторая строка, указывающая источник файлового объекта, вида `<...>`. Это атрибут только для чтения и может отсутствовать на всех файлоподобных объектах.14441445#### `file.newlines`14461447Если Python был собран с поддержкой [универсальных символов новой строки](https://python-all.ru/2.7/glossary.html#term-universal-newlines) (по умолчанию), то существует этот атрибут только для чтения, и для файлов, открытых в режиме чтения с универсальными переводами строк, он отслеживает типы встреченных при чтении символов новой строки. Возможные значения: `'\r'`, `'\n'`, `'\r\n'`, `None` (неизвестно, ещё не прочитано ни одной новой строки) или кортеж, содержащий все встреченные типы, чтобы указать, что использовались разные соглашения о переводах строк. Для файлов, не открытых в режиме чтения с универсальными переводами строк, значение этого атрибута будет `None`.14481449#### `file.softspace`14501451Логическое значение, указывающее, нужно ли печатать пробел перед другим значением при использовании оператора [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print). Классы, пытающиеся имитировать файловый объект, также должны иметь записываемый атрибут [`softspace`](https://python-all.ru/2.7/library/stdtypes.html#file.softspace), который следует инициализировать нулём. Для большинства классов, реализованных на Python, это будет автоматическим (может потребоваться осторожность для объектов, переопределяющих доступ к атрибутам); типы, реализованные на C, должны предоставлять записываемый атрибут [`softspace`](https://python-all.ru/2.7/library/stdtypes.html#file.softspace).14521453> **Примечание**1454>1455> Этот атрибут используется не для управления оператором [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print), а для того, чтобы реализация [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print) могла отслеживать своё внутреннее состояние.14561457## 5.10. тип memoryview14581459Новое в версии 2.7.14601461Объекты [`memoryview`](https://python-all.ru/2.7/library/stdtypes.html#memoryview) позволяют коду Python обращаться к внутренним данным объекта, поддерживающего буферный протокол, без копирования. Память обычно интерпретируется как простые байты.14621463#### `class memoryview(obj)`14641465Создаёт [`memoryview`](https://python-all.ru/2.7/library/stdtypes.html#memoryview), ссылающийся на *obj*. *obj* должен поддерживать буферный протокол. Встроенные объекты, поддерживающие буферный протокол, включают [`str`](https://python-all.ru/2.7/library/functions.html#str) и [`bytearray`](https://python-all.ru/2.7/library/functions.html#bytearray) (но не [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode)).14661467[`memoryview`](https://python-all.ru/2.7/library/stdtypes.html#memoryview) имеет понятие *элемента* – атомарной единицы памяти, обрабатываемой исходным объектом *obj*. Для многих простых типов, таких как [`str`](https://python-all.ru/2.7/library/functions.html#str) и [`bytearray`](https://python-all.ru/2.7/library/functions.html#bytearray), элемент – это один байт, но другие сторонние типы могут предоставлять более крупные элементы.14681469`len(view)` возвращает общее количество элементов в memoryview, *view*. Атрибут [`itemsize`](https://python-all.ru/2.7/library/stdtypes.html#memoryview.itemsize) выдаст количество байт в одном элементе.14701471[`memoryview`](https://python-all.ru/2.7/library/stdtypes.html#memoryview) поддерживает извлечение срезов для доступа к своим данным. Взятие одного индекса вернёт один элемент в виде объекта [`str`](https://python-all.ru/2.7/library/functions.html#str). Полный срез приведёт к созданию подпредставления:14721473```python1474>>> v = memoryview('abcefg')1475>>> v[1]1476'b'1477>>> v[-1]1478'g'1479>>> v[1:4]1480<memory at 0x77ab28>1481>>> v[1:4].tobytes()1482'bce'1483```14841485Если объект, над которым создано memoryview, допускает изменение своих данных, memoryview поддерживает присваивание срезу:14861487```python1488>>> data = bytearray('abcefg')1489>>> v = memoryview(data)1490>>> v.readonly1491False1492>>> v[0] = 'z'1493>>> data1494bytearray(b'zbcefg')1495>>> v[1:4] = '123'1496>>> data1497bytearray(b'z123fg')1498>>> v[2] = 'spam'1499Traceback (most recent call last):1500  File "<stdin>", line 1, in <module>1501ValueError: cannot modify size of memoryview object1502```15031504Обратите внимание, что размер объекта memoryview изменить нельзя.15051506[`memoryview`](https://python-all.ru/2.7/library/stdtypes.html#memoryview) имеет два метода:15071508#### `tobytes()`15091510Возвращает данные в буфере в виде байтовой строки (объект класса [`str`](https://python-all.ru/2.7/library/functions.html#str)).15111512```python1513>>> m = memoryview("abc")1514>>> m.tobytes()1515'abc'1516```15171518#### `tolist()`15191520Возвращает данные из буфера в виде списка целых чисел.15211522```python1523>>> memoryview("abc").tolist()1524[97, 98, 99]1525```15261527Также доступно несколько атрибутов только для чтения:15281529#### `format`15301531Строка, содержащая формат (в стиле модуля [`struct`](https://python-all.ru/2.7/library/struct.html#module-struct)) для каждого элемента представления. По умолчанию `'B'` – простая байтовая строка.15321533#### `itemsize`15341535Размер каждого элемента memoryview в байтах.15361537#### `shape`15381539Кортеж целых чисел длиной [`ndim`](https://python-all.ru/2.7/library/stdtypes.html#memoryview.ndim), задающий форму памяти как N-мерного массива.15401541#### `ndim`15421543Целое число, указывающее количество измерений многомерного массива, которое представляет данный блок памяти.15441545#### `strides`15461547Кортеж целых чисел длиной [`ndim`](https://python-all.ru/2.7/library/stdtypes.html#memoryview.ndim), задающий размер в байтах для доступа к каждому элементу по каждому измерению массива.15481549#### `readonly`15501551Логическое значение bool, указывающее, доступна ли память только для чтения.15521553## 5.11. Типы менеджеров контекста15541555Новое в версии 2.5.15561557Оператор [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with) языка Python поддерживает концепцию контекста выполнения, определяемого менеджером контекста. Это реализовано с помощью двух отдельных методов, которые позволяют пользовательским классам определять контекст выполнения, в который входят перед выполнением тела оператора и из которого выходят при завершении оператора.15581559*Протокол управления контекстом* состоит из пары методов, которые необходимо реализовать в объекте менеджера контекста, чтобы определить контекст выполнения:15601561#### `contextmanager.__enter__()`15621563Входит в контекст выполнения и возвращает либо этот объект, либо другой объект, связанный с контекстом выполнения. Значение, возвращаемое этим методом, связывается с идентификатором в предложении [`as`](https://python-all.ru/2.7/reference/compound_stmts.html#as) оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with), использующего данный контекстный менеджер.15641565Примером менеджера контекста, который возвращает сам себя, является файловый объект. Файловые объекты возвращают себя из \_\_enter\_\_(), чтобы [`open()`](https://python-all.ru/2.7/library/functions.html#open) можно было использовать как контекстное выражение в операторе [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).15661567Примером контекстного менеджера, возвращающего связанный объект, является менеджер, возвращаемый [`decimal.localcontext()`](https://python-all.ru/2.7/library/decimal.html#decimal.localcontext). Такие менеджеры устанавливают активный десятичный контекст в копию исходного десятичного контекста и затем возвращают эту копию. Это позволяет вносить изменения в текущий десятичный контекст в теле оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with), не затрагивая код за пределами оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).15681569#### `contextmanager.__exit__(exc_type, exc_val, exc_tb)`15701571Выходит из контекста выполнения и возвращает логический флаг, указывающий, следует ли подавить возникшее исключение. Если исключение возникло при выполнении тела оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with), аргументы содержат тип исключения, значение и информацию о трассировке. В противном случае все три аргумента равны `None`.15721573Возврат истинного значения из этого метода приведет к тому, что оператор [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with) подавит исключение и продолжит выполнение с оператора, следующего сразу за оператором [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with). В противном случае исключение продолжит распространяться после завершения выполнения этого метода. Исключения, возникающие во время выполнения этого метода, заменят любое исключение, возникшее в теле оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).15741575Переданное исключение никогда не должно вызываться повторно явно; вместо этого данный метод должен возвращать ложное значение, указывающее, что метод завершился успешно и не хочет подавлять вызванное исключение. Это позволяет коду управления контекстом (например, `contextlib.nested`) легко определить, действительно ли метод [`__exit__()`](https://python-all.ru/2.7/library/stdtypes.html#contextmanager.__exit__) завершился неудачей.15761577Python определяет несколько контекстных менеджеров для поддержки простой синхронизации потоков, своевременного закрытия файлов или других объектов, а также более простого управления активным контекстом десятичной арифметики. Конкретные типы не рассматриваются особым образом, помимо реализации протокола управления контекстом. См. модуль [`contextlib`](https://python-all.ru/2.7/library/contextlib.html#module-contextlib) для примеров.15781579Генераторы [generator](https://python-all.ru/2.7/glossary.html#term-generator)s Python и декоратор `contextlib.contextmanager` [decorator](https://python-all.ru/2.7/glossary.html#term-decorator) предоставляют удобный способ реализации этих протоколов. Если функция-генератор декорирована декоратором `contextlib.contextmanager`, она вернёт менеджер контекста, реализующий необходимые методы [`__enter__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__exit__), вместо итератора, создаваемого недекорированной функцией-генератором.15801581Обратите внимание, что в структуре типа для объектов Python в Python/C API нет специального слота для любого из этих методов. Типы расширений, желающие определить эти методы, должны предоставлять их как обычный метод, доступный из Python. По сравнению с накладными расходами на установку контекста выполнения, накладные расходы на один поиск в словаре класса пренебрежимо малы.15821583## 5.12. Другие встроенные типы15841585Интерпретатор поддерживает несколько других видов объектов. Большинство из них поддерживают только одну или две операции.15861587### 5.12.1. Модули15881589Единственная специальная операция над модулем – это доступ к атрибутам: `m.name`, где *m* – это модуль, а *name* обращается к имени, определённому в таблице символов модуля *m*. Атрибутам модуля можно присваивать значения. (Обратите внимание, что оператор [`import`](https://python-all.ru/2.7/reference/simple_stmts.html#import) строго говоря, не является операцией над объектом модуля; `import foo` не требует существования объекта модуля с именем *foo*, а требует (внешнего) *определения* для модуля с именем *foo* где-то.)15901591Специальным атрибутом каждого модуля является [`__dict__`](https://python-all.ru/2.7/library/stdtypes.html#object.__dict__). Это словарь, содержащий таблицу символов модуля. Изменение этого словаря действительно изменит таблицу символов модуля, но прямое присваивание атрибуту [`__dict__`](https://python-all.ru/2.7/library/stdtypes.html#object.__dict__) невозможно (можно написать `m.__dict__['a'] = 1`, что определит `m.a` как `1`, но нельзя написать `m.__dict__ = {}`). Изменять [`__dict__`](https://python-all.ru/2.7/library/stdtypes.html#object.__dict__) напрямую не рекомендуется.15921593Модули, встроенные в интерпретатор, записываются так: `<module 'sys' (built-in)>`. Если загружены из файла, они записываются как `<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>`.15941595### 5.12.2. Классы и экземпляры классов15961597См. [Объекты, значения и типы](https://python-all.ru/2.7/reference/datamodel.html#objects) и [Определения классов](https://python-all.ru/2.7/reference/compound_stmts.html#class).15981599### 5.12.3. Функции16001601Объекты-функции создаются определениями функций. Единственная операция над объектом-функцией – это вызов: `func(argument-list)`.16021603На самом деле существует два вида объектов-функций: встроенные функции и определяемые пользователем функции. Оба поддерживают одну и ту же операцию (вызов функции), но реализация различается, отсюда разные типы объектов.16041605Дополнительную информацию см. в разделе [Определения функций](https://python-all.ru/2.7/reference/compound_stmts.html#function).16061607### 5.12.4. Методы16081609Методы – это функции, вызываемые с использованием точечной нотации. Существуют два вида: встроенные методы (например, `append()` для списков) и методы экземпляров классов. Встроенные методы описываются с типами, которые их поддерживают.16101611Реализация добавляет два специальных атрибута только для чтения к методам экземпляров классов: `m.im_self` – это объект, с которым работает метод, а `m.im_func` – функция, реализующая метод. Вызов `m(arg-1, arg-2, ..., arg-n)` полностью эквивалентен вызову `m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)`.16121613Методы экземпляров классов бывают *связанными* или *несвязанными*, в зависимости от того, был ли метод получен через экземпляр или через класс соответственно. Когда метод несвязанный, его атрибут `im_self` будет `None`, и при вызове необходимо передать явный объект `self` в качестве первого аргумента. В этом случае `self` должен быть экземпляром класса несвязанного метода (или подкласса этого класса), иначе возбуждается [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).16141615Как и объекты функций, объекты методов поддерживают получение произвольных атрибутов. Однако, поскольку атрибуты методов на самом деле хранятся в базовом объекте функции (`meth.im_func`), установка атрибутов методов как для связанных, так и для несвязанных методов запрещена. Попытка установить атрибут метода приводит к возбуждению [`AttributeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.AttributeError). Чтобы установить атрибут метода, необходимо явно установить его в базовом объекте функции:16161617```python1618>>> class C:1619...     def method(self):1620...         pass1621...1622>>> c = C()1623>>> c.method.whoami = 'my name is method'  # нельзя установить на методе1624Traceback (most recent call last):1625  File "<stdin>", line 1, in <module>1626AttributeError: 'instancemethod' object has no attribute 'whoami'1627>>> c.method.im_func.whoami = 'my name is method'1628>>> c.method.whoami1629'my name is method'1630```16311632Дополнительную информацию см. в разделе [Стандартная иерархия типов](https://python-all.ru/2.7/reference/datamodel.html#types).16331634### 5.12.5. Объекты кода16351636Объекты кода используются реализацией для представления «псевдокомпилированного» исполняемого кода Python, такого как тело функции. Они отличаются от объектов функций тем, что не содержат ссылки на глобальное окружение выполнения. Объекты кода возвращаются встроенной функцией [`compile()`](https://python-all.ru/2.7/library/functions.html#compile) и могут быть получены из объектов функций через их атрибут `func_code`. См. также модуль [`code`](https://python-all.ru/2.7/library/code.html#module-code).16371638Объект кода может быть выполнен или вычислен путём передачи его (вместо строки исходного кода) оператору [`exec`](https://python-all.ru/2.7/reference/simple_stmts.html#exec) или встроенной функции [`eval()`](https://python-all.ru/2.7/library/functions.html#eval).16391640Дополнительную информацию см. в разделе [Стандартная иерархия типов](https://python-all.ru/2.7/reference/datamodel.html#types).16411642### 5.12.6. Объекты типов16431644Объекты типов представляют различные типы объектов. Тип объекта можно получить с помощью встроенной функции [`type()`](https://python-all.ru/2.7/library/functions.html#type). Над типами не определено специальных операций. Стандартный модуль [`types`](https://python-all.ru/2.7/library/types.html#module-types) определяет имена для всех стандартных встроенных типов.16451646Типы записываются так: `<type 'int'>`.16471648### 5.12.7. Объект None16491650Этот объект возвращается функциями, которые не возвращают значение явно. Он не поддерживает никаких специальных операций. Существует ровно один нулевой объект с именем `None` (встроенное имя).16511652Он записывается как `None`.16531654### 5.12.8. Объект Ellipsis16551656Этот объект используется расширенной нотацией срезов (см. [Срезы](https://python-all.ru/2.7/reference/expressions.html#slicings)). Он не поддерживает никаких специальных операций. Существует ровно один объект-многоточие с именем [`Ellipsis`](https://python-all.ru/2.7/library/constants.html#Ellipsis) (встроенное имя).16571658Оно записывается как `Ellipsis`. В индексе его также можно записать как `...`, например `seq[...]`.16591660### 5.12.9. Объект NotImplemented16611662Этот объект возвращается из сравнений и бинарных операций, когда они применяются к типам, которые их не поддерживают. См. [Comparisons](https://python-all.ru/2.7/reference/expressions.html#comparisons) для получения дополнительной информации.16631664Он записывается как `NotImplemented`.16651666### 5.12.10. Логические значения16671668Логические значения – это два постоянных объекта `False` и `True`. Они используются для представления истинностных значений (хотя другие значения также могут считаться ложными или истинными). В числовых контекстах (например, при передаче в арифметическую операцию) они ведут себя как целые числа 0 и 1 соответственно. Встроенная функция [`bool()`](https://python-all.ru/2.7/library/functions.html#bool) может быть использована для преобразования любого значения в логическое, если значение может быть интерпретировано как истинностное значение (см. раздел [Проверка истинности](https://python-all.ru/2.7/library/stdtypes.html#truth) выше).16691670Они записываются как `False` и `True` соответственно.16711672### 5.12.11. Внутренние объекты16731674См. [Стандартная иерархия типов](https://python-all.ru/2.7/reference/datamodel.html#types) для получения этой информации. В нем описываются объекты стековых кадров, объекты трассировки и объекты срезов.16751676## 5.13. Специальные атрибуты16771678Реализация добавляет несколько специальных атрибутов только для чтения к некоторым типам объектов, где это уместно. Некоторые из них не сообщаются встроенной функцией [`dir()`](https://python-all.ru/2.7/library/functions.html#dir).16791680#### `object.__dict__`16811682Словарь или другой отображающий объект, используемый для хранения (изменяемых) атрибутов объекта.16831684#### `object.__methods__`16851686Устарело с версии 2.2: Используйте встроенную функцию [`dir()`](https://python-all.ru/2.7/library/functions.html#dir) для получения списка атрибутов объекта. Этот атрибут больше не доступен.16871688#### `object.__members__`16891690Устарело с версии 2.2: Используйте встроенную функцию [`dir()`](https://python-all.ru/2.7/library/functions.html#dir) для получения списка атрибутов объекта. Этот атрибут больше не доступен.16911692#### `instance.__class__`16931694Класс, которому принадлежит экземпляр класса.16951696#### `class.__bases__`16971698Кортеж базовых классов объекта класса.16991700#### `definition.__name__`17011702Имя класса, типа, функции, метода, дескриптора или экземпляра генератора.17031704Следующие атрибуты поддерживаются только классами [нового стиля](https://python-all.ru/2.7/glossary.html#term-new-style-class).17051706#### `class.__mro__`17071708Этот атрибут представляет собой кортеж классов, которые учитываются при поиске базовых классов во время разрешения методов.17091710#### `class.mro()`17111712Этот метод может быть переопределён метаклассом для настройки порядка разрешения методов для его экземпляров. Он вызывается при создании класса, и его результат сохраняется в [`__mro__`](https://python-all.ru/2.7/library/stdtypes.html#class.__mro__).17131714#### `class.__subclasses__()`17151716Каждый класс нового стиля хранит список слабых ссылок на свои непосредственные подклассы. Этот метод возвращает список всех тех ссылок, которые ещё живы. Пример:17171718```python1719>>> int.__subclasses__()1720[<type 'bool'>]1721```17221723Сноски17241725**[1](https://python-all.ru/2.7/library/stdtypes.html#id1)**17261727Дополнительную информацию об этих специальных методах можно найти в Справочном руководстве Python ([Базовая настройка](https://python-all.ru/2.7/reference/datamodel.html#customization)).17281729**[2](https://python-all.ru/2.7/library/stdtypes.html#id2)**17301731Как следствие, список `[1, 2]` считается равным `[1.0, 2.0]`, и аналогично для кортежей.17321733**[3](https://python-all.ru/2.7/library/stdtypes.html#id4)**17341735Они должны иметь, поскольку синтаксический анализатор не может определить тип операндов.17361737**4([1](https://python-all.ru/2.7/library/stdtypes.html#id6),[2](https://python-all.ru/2.7/library/stdtypes.html#id7),[3](https://python-all.ru/2.7/library/stdtypes.html#id8),[4](https://python-all.ru/2.7/library/stdtypes.html#id9))**17381739Символы с учётом регистра – это те, у которых свойство общей категории является одним из «Lu» (буква, верхний регистр), «Ll» (буква, нижний регистр) или «Lt» (буква, заглавная).17401741**[5](https://python-all.ru/2.7/library/stdtypes.html#id10)**17421743Чтобы отформатировать только кортеж, следует предоставить одноэлементный кортеж, единственным элементом которого является форматируемый кортеж.17441745**[6](https://python-all.ru/2.7/library/stdtypes.html#id11)**17461747Преимущество сохранения символа новой строки в том, что возврат пустой строки является однозначным признаком конца файла (EOF). Также можно определить, заканчивается ли последняя строка файла символом новой строки или нет (да, такое бывает!), что может иметь значение, например, при создании точной копии файла во время построчного чтения.1748