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

stdtypes.md

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

1> **Источник:** https://python-all.ru/3.0/library/stdtypes.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Встроенные типы89В следующих разделах описываются стандартные типы, встроенные в интерпретатор.1011Основные встроенные типы – это числа, последовательности, отображения, файлы, классы, экземпляры и исключения.1213Некоторые операции поддерживаются несколькими типами объектов; в частности, практически все объекты можно сравнивать, проверять на истинность и преобразовывать в строку (с помощью функции [`repr()`](https://python-all.ru/3.0/library/functions.html#repr) или несколько отличной функции [`str()`](https://python-all.ru/3.0/library/functions.html#str)). Последняя функция неявно используется, когда объект выводится функцией [`print()`](https://python-all.ru/3.0/library/functions.html#print).1415## Проверка на истинность1617Любой объект можно проверить на истинность для использования в условии [`if`](https://python-all.ru/3.0/reference/compound_stmts.html#if) или [`while`](https://python-all.ru/3.0/reference/compound_stmts.html#while) или в качестве операнда логических операций ниже. Следующие значения считаются ложными:1819>2021- `None`22- `False`23- ноль любого числового типа, например, `0`, `0.0`, `0j`.24- любая пустая последовательность, например, `''`, `()`, `[]`.25- любое пустое отображение, например, `{}`.26- экземпляры пользовательских классов, если класс определяет метод [`__bool__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__bool__) или [`__len__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__len__), когда этот метод возвращает целое ноль или логическое значение [`bool`](https://python-all.ru/3.0/library/functions.html#bool) `False`. [\[1\]](https://python-all.ru/3.0/library/stdtypes.html#id8)2728Все остальные значения считаются истинными – поэтому объекты многих типов всегда истинны.2930Операции и встроенные функции, возвращающие логический результат, всегда возвращают `0` или `False` для false и `1` или `True` для true, если не указано иное. (Важное исключение: логические операции `or` и `and` всегда возвращают один из своих операндов.)3132## Логические операции – [`and`](https://python-all.ru/3.0/reference/expressions.html#and), [`or`](https://python-all.ru/3.0/reference/expressions.html#or), [`not`](https://python-all.ru/3.0/reference/expressions.html#not)3334Это булевы операции в порядке возрастания приоритета:3536| Операция | Результат | Примечания |37| --- | --- | --- |38| `x or y` | если *x* ложно, то *y*, иначе *x* | (1) |39| `x and y` | если *x* ложно, то *x*, иначе *y* | (2) |40| `not x` | если *x* ложно, то `True`, иначе `False` | (3) |4142Примечания:43441. Это оператор короткого замыкания, поэтому он вычисляет второй аргумент, только если первый равен [`False`](https://python-all.ru/3.0/library/constants.html#False).452. Это оператор короткого замыкания, поэтому он вычисляет второй аргумент, только если первый равен [`True`](https://python-all.ru/3.0/library/constants.html#True).463. `not` имеет более низкий приоритет, чем нелогические операторы, поэтому `not a == b` интерпретируется как `not (a == b)`, а `a == not b` является синтаксической ошибкой.4748## Сравнения4950В Python есть восемь операций сравнения. Все они имеют одинаковый приоритет (выше, чем у логических операций). Сравнения можно произвольно соединять в цепочки; например, `x < y <= z` эквивалентно `x < y and y <= z`, за исключением того, что *y* вычисляется только один раз (но в обоих случаях *z* не вычисляется вообще, когда `x < y` оказывается ложным).5152В этой таблице приведены операции сравнения:5354| Операция | Значение |55| --- | --- |56| `<` | строго меньше |57| `<=` | меньше или равно |58| `>` | строго больше |59| `>=` | больше или равно |60| `==` | равно |61| `!=` | не равно |62| `is` | идентичность объектов |63| `is not` | отрицание идентичности объектов |6465Объекты разных типов, за исключением разных числовых типов, никогда не сравниваются как равные. Кроме того, некоторые типы (например, файловые объекты) поддерживают лишь вырожденное понятие сравнения, при котором любые два объекта этого типа неравны. Операторы `<`, `<=`, `>` и `>=` вызовут исключение [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError), если какой-либо операнд является комплексным числом, объекты имеют разные типы, которые невозможно сравнить, или в других случаях, когда определённый порядок отсутствует.6667Неидентичные экземпляры класса обычно сравниваются как неравные, если класс не определяет метод [`__eq__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__eq__).6869Экземпляры класса нельзя упорядочить по отношению к другим экземплярам того же класса или к объектам других типов, если класс не определяет достаточное количество методов [`__lt__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__lt__), [`__le__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__le__), [`__gt__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__gt__) и [`__ge__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__ge__) (в общем случае достаточно [`__lt__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__lt__) и [`__eq__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__eq__), если нужны обычные значения операторов сравнения).7071Поведение операторов [`is`](https://python-all.ru/3.0/reference/expressions.html#is) и [`is not`](https://python-all.ru/3.0/reference/expressions.html#isnot) не может быть настроено; они также могут применяться к любым двум объектам и никогда не вызывают исключение.7273Ещё две операции с тем же синтаксическим приоритетом, `in` и `not in`, поддерживаются только типами последовательностей (см. ниже).7475## Числовые типы – [`int`](https://python-all.ru/3.0/library/functions.html#int), [`float`](https://python-all.ru/3.0/library/functions.html#float), [`complex`](https://python-all.ru/3.0/library/functions.html#complex)7677Существует три различных числовых типа: *целые числа*, *числа с плавающей запятой* и *комплексные числа*. Кроме того, логические значения являются подтипом целых чисел. Целые числа имеют неограниченную точность. Числа с плавающей запятой реализованы с помощью `double` в C – все предположения об их точности теряют силу, если не известна машина, с которой ведётся работа. Комплексные числа имеют действительную и мнимую части, каждая из которых реализована с помощью `double` в C. Чтобы извлечь эти части из комплексного числа *z*, используются `z.real` и `z.imag`. (Стандартная библиотека включает дополнительные числовые типы: [`fractions`](https://python-all.ru/3.0/library/fractions.html#module-fractions) для рациональных чисел и [`decimal`](https://python-all.ru/3.0/library/decimal.html#module-decimal) для чисел с плавающей запятой с настраиваемой пользователем точностью.)7879Числа создаются с помощью числовых литералов или как результат встроенных функций и операторов. Простые целые литералы (включая шестнадцатеричные, восьмеричные и двоичные числа) дают целые числа. Числовые литералы, содержащие десятичную точку или знак экспоненты, дают числа с плавающей точкой. Добавление `'j'` или `'J'` к числовому литералу даёт мнимое число (комплексное число с нулевой действительной частью), которое можно прибавить к целому числу или числу с плавающей точкой, чтобы получить комплексное число с действительной и мнимой частями.8081Python полностью поддерживает смешанную арифметику: когда бинарный арифметический оператор имеет операнды разных числовых типов, операнд с более «узким» типом расширяется до типа другого, где целое уже, чем с плавающей точкой, а то, в свою очередь, уже, чем комплексное. Сравнения чисел смешанного типа используют то же правило. [\[2\]](https://python-all.ru/3.0/library/stdtypes.html#id9) Конструкторы [`int()`](https://python-all.ru/3.0/library/functions.html#int), [`float()`](https://python-all.ru/3.0/library/functions.html#float) и [`complex()`](https://python-all.ru/3.0/library/functions.html#complex) можно использовать для создания чисел определённого типа.8283Все числовые типы (кроме комплексных) поддерживают следующие операции, отсортированные по возрастанию приоритета (операции в одной рамке имеют одинаковый приоритет; все числовые операции имеют более высокий приоритет, чем операции сравнения):8485| Операция | Результат | Примечания | Полная документация |86| --- | --- | --- | --- |87| `x + y` | сумма *x* и *y* |  |  |88| `x - y` | разность *x* и *y* |  |  |89| `x * y` | произведение *x* и *y* |  |  |90| `x / y` | частное *x* и *y* |  |  |91| `x // y` | неполное частное *x* и *y* | (1) |  |92| `x % y` | остаток от `x / y` | (2) |  |93| `-x` | *x* с обратным знаком |  |  |94| `+x` | *x* без изменений |  |  |95| `abs(x)` | абсолютное значение или модуль *x* |  | [`abs()`](https://python-all.ru/3.0/library/functions.html#abs) |96| `int(x)` | *x*, преобразованное в целое число | (3) | [`int()`](https://python-all.ru/3.0/library/functions.html#int) |97| `float(x)` | *x*, преобразованное в число с плавающей запятой | (4) | [`float()`](https://python-all.ru/3.0/library/functions.html#float) |98| `complex(re, im)` | комплексное число с действительной частью *re* и мнимой частью *im*. *im* по умолчанию равно нулю. |  | [`complex()`](https://python-all.ru/3.0/library/functions.html#complex) |99| `c.conjugate()` | сопряжённое комплексного числа *c* |  |  |100| `divmod(x, y)` | пара `(x // y, x % y)` | (2) | [`divmod()`](https://python-all.ru/3.0/library/functions.html#divmod) |101| `pow(x, y)` | *x* в степени *y* | (5) | [`pow()`](https://python-all.ru/3.0/library/functions.html#pow) |102| `x ** y` | *x* в степени *y* | (5) |  |103104Примечания:1051061. Также называется целочисленным делением. Результирующее значение является целым числом, хотя тип результата не обязательно int. Результат всегда округляется в сторону минус бесконечности: `1//2` равно `0`, `(-1)//2` равно `-1`, `1//(-2)` равно `-1`, а `(-1)//(-2)` равно `0`.1072. Не для комплексных чисел. Вместо этого преобразуйте в числа с плавающей запятой с помощью [`abs()`](https://python-all.ru/3.0/library/functions.html#abs), если это уместно.1083. Преобразование чисел с плавающей запятой в целые может выполняться округлением или усечением, как в C; обратитесь к функциям `floor()` и `ceil()` в модуле [`math`](https://python-all.ru/3.0/library/math.html#module-math) для получения однозначных преобразований.1094. float также принимает строки “nan” и “inf” с необязательным префиксом “+” или “-” для Not a Number (NaN) и положительной или отрицательной бесконечности.1105. Python определяет `pow(0, 0)` и `0 ** 0` как `1`, что распространено в языках программирования.111112Все типы [`numbers.Real`](https://python-all.ru/3.0/library/numbers.html#numbers.Real) ([`int`](https://python-all.ru/3.0/library/functions.html#int) и [`float`](https://python-all.ru/3.0/library/functions.html#float)) также включают следующие операции:113114| Операция | Результат | Примечания |115| --- | --- | --- |116| `math.trunc(x)` | *x*, усечённое до целого |  |117| `round(x[, n])` | *x*, округлённое до n знаков, с округлением половины до чётного. Если n опущено, по умолчанию 0. |  |118| `math.floor(x)` | наибольшее целое число с плавающей запятой, не превышающее *x* |  |119| `math.ceil(x)` | наименьшее целое число с плавающей запятой, не меньшее *x* |  |120121За дополнительными числовыми операциями обращайтесь к [`math`](https://python-all.ru/3.0/library/math.html#module-math) и [`cmath`](https://python-all.ru/3.0/library/cmath.html#module-cmath) модулям.122123### Побитовые операции над целыми типами124125Целые числа поддерживают дополнительные операции, которые имеют смысл только для битовых строк. Отрицательные числа обрабатываются как их дополнительный код (это предполагает достаточно большое количество битов, чтобы при операции не произошло переполнения).126127Приоритеты двоичных побитовых операций ниже, чем у числовых операций, и выше, чем у сравнений; унарная операция `~` имеет тот же приоритет, что и другие унарные числовые операции (`+` и `-`).128129В этой таблице перечислены битовые операции, отсортированные по возрастанию приоритета (операции в одной ячейке имеют одинаковый приоритет):130131| Операция | Результат | Примечания |132| --- | --- | --- |133| `x \| y` | побитовое *ИЛИ* для *x* и *y* |  |134| `x ^ y` | побитовое *исключающее ИЛИ* для *x* и *y* |  |135| `x & y` | побитовое *И* для *x* и *y* |  |136| `x << n` | *x*, сдвинутое влево на *n* битов | (1)(2) |137| `x >> n` | *x*, сдвинутое вправо на *n* битов | (1)(3) |138| `~x` | инвертированные биты *x* |  |139140Примечания:1411421. Отрицательные значения сдвига недопустимы и приводят к возникновению исключения [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError).1432. Сдвиг влево на *n* бит эквивалентен умножению на `pow(2, n)` без проверки переполнения.1443. Сдвиг вправо на *n* бит эквивалентен делению на `pow(2, n)` без проверки переполнения.145146### Дополнительные методы для целых типов147148#### `[int.bit_length]int.bit_length()`149150Возвращает количество битов, необходимое для представления целого числа в двоичном виде, без учёта знака и ведущих нулей:151152```python153>>> n = -37154>>> bin(n)155'-0b100101'156>>> n.bit_length()1576158```159160Точнее, если `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`.161162Эквивалентно следующему:163164```python165def bit_length(self):166    s = bin(x)          # двоичное представление:  bin(-37) --> '-0b100101'167    s = s.lstrip('-0b') # удалить ведущие нули и знак минус168    return len(s)       # len('100101') --> 6169```170171Новое в версии 3.1.172173### Дополнительные методы float174175Тип float имеет некоторые дополнительные методы.176177#### `[float.as_integer_ratio]float.as_integer_ratio()`178179Возвращает пару целых чисел, отношение которых в точности равно исходному числу с плавающей запятой, с положительным знаменателем. Возбуждает180181[`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError)182183для бесконечностей и184185[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)186187для NaN.188189Два метода поддерживают преобразование в шестнадцатеричные строки и обратно. Поскольку числа с плавающей запятой в Python внутренне хранятся в двоичном виде, преобразование числа с плавающей запятой в строку *decimal* и обратно обычно связано с небольшой ошибкой округления. Напротив, шестнадцатеричные строки позволяют точно представлять и задавать числа с плавающей запятой. Это может быть полезно при отладке и в численных расчётах.190191#### `[float.hex]float.hex()`192193Возвращает представление числа с плавающей запятой в виде шестнадцатеричной строки. Для конечных чисел с плавающей запятой такое представление всегда содержит префикс194195`0x`196197и суффикс198199`p`200201с показателем степени.202203#### `[float.fromhex]float.fromhex(s)`204205Метод класса, возвращающий число с плавающей запятой, представленное шестнадцатеричной строкой206207*s*208209. Строка210211*s*212213может содержать начальные и конечные пробелы.214215Обратите внимание, что [`float.hex()`](https://python-all.ru/3.0/library/stdtypes.html#float.hex) – это метод экземпляра, тогда как [`float.fromhex()`](https://python-all.ru/3.0/library/stdtypes.html#float.fromhex) – это метод класса.216217Шестнадцатеричная строка имеет вид:218219```python220[sign] ['0x'] integer ['.' fraction] ['p' exponent]221```222223где необязательный `знак` может быть `+` или `-`, `целая часть` и `дробная часть` – строки шестнадцатеричных цифр, а `порядок` – десятичное целое с необязательным ведущим знаком. Регистр не имеет значения, и должна быть хотя бы одна шестнадцатеричная цифра либо в целой, либо в дробной части. Этот синтаксис похож на синтаксис, указанный в разделе 6.4.4.2 стандарта C99, а также на синтаксис, используемый в Java 1.5 и выше. В частности, результат [`float.hex()`](https://python-all.ru/3.0/library/stdtypes.html#float.hex) может использоваться как шестнадцатеричный литерал с плавающей запятой в коде на C или Java, а шестнадцатеричные строки, создаваемые символом формата `%a` в C или методом `Double.toHexString` в Java, принимаются [`float.fromhex()`](https://python-all.ru/3.0/library/stdtypes.html#float.fromhex).224225Обратите внимание, что порядок записывается в десятичном виде, а не в шестнадцатеричном, и что он показывает степень двойки, на которую умножается коэффициент. Например, шестнадцатеричная строка `0x3.a7p10` представляет число с плавающей запятой `(3 + 10./16 + 7./16**2) * 2.0**10`, или `3740.0`:226227```python228>>> float.fromhex('0x3.a7p10')2293740.0230```231232Применение обратного преобразования к `3740.0` даёт другую шестнадцатеричную строку, представляющую то же число:233234```python235>>> float.hex(3740.0)236'0x1.d380000000000p+11'237```238239## Типы итераторов240241Python поддерживает концепцию итерации по контейнерам. Это реализовано с помощью двух различных методов; они используются, чтобы позволить пользовательским классам поддерживать итерацию. Последовательности, описанные ниже более подробно, всегда поддерживают методы итерации.242243Для поддержки итерации в объектах-контейнерах необходимо определить один метод:244245#### `[container.__iter__]container.__iter__()`246247Возвращает объект-итератор. Объект должен поддерживать протокол итератора, описанный ниже. Если контейнер поддерживает разные виды итерации, можно добавить дополнительные методы для явного запроса итераторов для этих типов итерации. (Пример объекта, поддерживающего несколько форм итерации – древовидная структура, которая поддерживает как обход в ширину, так и обход в глубину.) Этот метод соответствует полю248249[`tp_iter`](https://python-all.ru/3.0/c-api/typeobj.html#tp_iter)250251структуры типа для объектов Python в Python/C API.252253Сами объекты итераторов должны поддерживать следующие два метода, которые вместе образуют *протокол итератора*:254255#### `[iterator.__iter__]iterator.__iter__()`256257Возвращает сам объект-итератор. Это требуется, чтобы и контейнеры, и итераторы можно было использовать с операторами258259[`for`](https://python-all.ru/3.0/reference/compound_stmts.html#for)260261и262263[`in`](https://python-all.ru/3.0/reference/expressions.html#in)264265. Этот метод соответствует полю266267[`tp_iter`](https://python-all.ru/3.0/c-api/typeobj.html#tp_iter)268269структуры типа для объектов Python в Python/C API.270271#### `[iterator.__next__]iterator.__next__()`272273Возвращает следующий элемент из контейнера. Если больше нет элементов, возбуждает исключение274275[`StopIteration`](https://python-all.ru/3.0/library/exceptions.html#exceptions.StopIteration)276277. Этот метод соответствует полю278279[`tp_iternext`](https://python-all.ru/3.0/c-api/typeobj.html#tp_iternext)280281структуры типа для объектов Python в Python/C API.282283Python определяет несколько объектов итераторов для поддержки итерации по общим и специфическим типам последовательностей, словарям и другим более специализированным формам. Конкретные типы не важны, кроме их реализации протокола итератора.284285Как только метод `__next__()` итератора возбуждает исключение [`StopIteration`](https://python-all.ru/3.0/library/exceptions.html#exceptions.StopIteration), он должен продолжать делать это при последующих вызовах. Реализации, не соблюдающие это свойство, считаются некорректными.286287Python [*генератор*](https://python-all.ru/3.0/glossary.html#term-generator)ы предоставляют удобный способ реализовать протокол итератора. Если метод [`__iter__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__iter__) объекта-контейнера реализован как генератор, он автоматически вернет объект-итератор (технически, объект-генератор), предоставляющий методы [`__iter__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__iter__) и `__next__()`.288289## Типы последовательностей – [`str`](https://python-all.ru/3.0/library/functions.html#str), [`bytes`](https://python-all.ru/3.0/library/functions.html#bytes), [`bytearray`](https://python-all.ru/3.0/library/functions.html#bytearray), [`list`](https://python-all.ru/3.0/library/functions.html#list), [`tuple`](https://python-all.ru/3.0/library/functions.html#tuple), [`range`](https://python-all.ru/3.0/library/functions.html#range)290291Существует шесть типов последовательностей: строки, последовательности байтов (объекты [`bytes`](https://python-all.ru/3.0/library/functions.html#bytes)), массивы байтов (объекты [`bytearray`](https://python-all.ru/3.0/library/functions.html#bytearray)), списки, кортежи и объекты range. Для других контейнеров обратитесь ко встроенным классам [`dict`](https://python-all.ru/3.0/library/stdtypes.html#dict) и [`set`](https://python-all.ru/3.0/library/stdtypes.html#set), а также к модулю [`collections`](https://python-all.ru/3.0/library/collections.html#module-collections).292293Строки содержат символы Unicode. Их литералы записываются в одинарных или двойных кавычках: `'xyzzy'`, `"frobozz"`. Подробнее о строковых литералах см. [*String and Bytes literals*](https://python-all.ru/3.0/reference/lexical_analysis.html#strings). Помимо описанной здесь функциональности, существуют также строковые методы, описанные в разделе [*String Methods*](https://python-all.ru/3.0/library/stdtypes.html#string-methods).294295Объекты bytes и bytearray содержат отдельные байты – первый является неизменяемым, а второй – изменяемой последовательностью. Объекты bytes можно создать с помощью конструктора [`bytes()`](https://python-all.ru/3.0/library/functions.html#bytes), а также из литералов, используя префикс `b` с обычным синтаксисом строк: `b'xyzzy'`. Для создания массивов байтов используется функция [`bytearray()`](https://python-all.ru/3.0/library/functions.html#bytearray).296297> **Предупреждение**298>299> В то время как строковые объекты являются последовательностями символов (представленных строками длиной 1), объекты bytes и bytearray являются последовательностями *целых чисел* (от 0 до 255), представляющих значение ASCII отдельных байтов. Это означает, что для объекта bytes или bytearray *b*, `b[0]` будет целым числом, а `b[0:1]` будет объектом bytes или bytearray длиной 1. Представление объектов bytes использует формат литерала (`b'...'`), так как это обычно более полезно, чем, например, `bytes([50, 19, 100])`. Вы всегда можете преобразовать объект bytes в список целых чисел с помощью `list(b)`.300>301> Кроме того, в то время как в предыдущих версиях Python байтовые строки и строки Unicode можно было довольно свободно обменивать друг на друга (за исключением проблем кодировки), строки и байты теперь являются полностью раздельными понятиями. Не происходит неявного кодирования/декодирования при передаче объекта неправильного типа. Строка всегда не равна объекту bytes или bytearray.302303Списки создаются с помощью квадратных скобок, разделяя элементы запятыми: `[a, b, c]`. Кортежи создаются с помощью оператора запятой (не внутри квадратных скобок), с обрамляющими круглыми скобками или без них, но пустой кортеж должен иметь обрамляющие круглые скобки, например `a, b, c` или `()`. Кортеж из одного элемента должен иметь завершающую запятую, например `(d,)`.304305Объекты типа range создаются с помощью функции [`range()`](https://python-all.ru/3.0/library/functions.html#range). Они не поддерживают срезы, конкатенацию или повторение, и использование `in`, `not in`, [`min()`](https://python-all.ru/3.0/library/functions.html#min) или [`max()`](https://python-all.ru/3.0/library/functions.html#max) с ними неэффективно.306307Большинство типов последовательностей поддерживают следующие операции. Операции `in` и `not in` имеют тот же приоритет, что и операции сравнения. Операции `+` и `*` имеют тот же приоритет, что и соответствующие числовые операции. [\[3\]](https://python-all.ru/3.0/library/stdtypes.html#id10) Дополнительные методы предоставляются для [*Изменяемых типов последовательностей*](https://python-all.ru/3.0/library/stdtypes.html#typesseq-mutable).308309В этой таблице перечислены операции над последовательностями, отсортированные по возрастанию приоритета (операции в одном блоке имеют одинаковый приоритет). В таблице *s* и *t* – последовательности одного типа; *n*, *i* и *j* – целые числа:310311| Операция | Результат | Примечания |312| --- | --- | --- |313| `x в s` | `True`, если элемент *s* равен *x*, иначе `False` | (1) |314| `x не в s` | `False`, если элемент *s* равен *x*, иначе `True` | (1) |315| `s + t` | конкатенация *s* и *t* | (6) |316| `s * n, n * s` | *n* поверхностных копий *s*, объединённых | (2) |317| `s[i]` | *i*-й элемент *s*, индексация с 0 | (3) |318| `s[i:j]` | срез *s* от *i* до *j* | (3)(4) |319| `s[i:j:k]` | срез *s* от *i* до *j* с шагом *k* | (3)(5) |320| `len(s)` | длина *s* |  |321| `min(s)` | наименьший элемент *s* |  |322| `max(s)` | наибольший элемент *s* |  |323324Типы последовательностей также поддерживают сравнения. В частности, кортежи и списки сравниваются лексикографически путём сравнения соответствующих элементов. Это означает, что для равенства каждый элемент должен быть равным, а две последовательности должны быть одного типа и иметь одинаковую длину. (Полные подробности см. в [*Сравнения*](https://python-all.ru/3.0/reference/expressions.html#comparisons) в справочнике по языку.)325326Примечания:3273281. Если *s* является строковым объектом, операции `in` и `not in` работают как проверка на подстроку.3292. Значения *n* меньше `0` интерпретируются как `0` (что даёт пустую последовательность того же типа, что и *s*). Также обратите внимание, что копии являются поверхностными; вложенные структуры не копируются. Это часто удивляет новичков в Python; рассмотрите:330331   ```python332   >>> lists = [[]] * 3333   >>> lists334   [[], [], []]335   >>> lists[0].append(3)336   >>> lists337   [[3], [3], [3]]338   ```339340   Произошло следующее: `[[]]` – это список из одного элемента, содержащий пустой список, поэтому все три элемента `[[]] * 3` являются (указателями на) этот единственный пустой список. Модификация любого из элементов `списков` изменяет этот единственный список. Создать список из разных списков можно так:341342   ```python343   >>> lists = [[] for i in range(3)]344   >>> lists[0].append(3)345   >>> lists[1].append(5)346   >>> lists[2].append(7)347   >>> lists348   [[3], [5], [7]]349   ```3503. Если *i* или *j* отрицательно, индекс отсчитывается от конца строки: подставляется `len(s) + i` или `len(s) + j`. Но обратите внимание, что `-0` по-прежнему равно `0`.3514. Срез *s* от *i* до *j* определяется как последовательность элементов с индексом *k*, таким что `i <= k < j`. Если *i* или *j* больше `len(s)`, используется `len(s)`. Если *i* опущено или равно `None`, используется `0`. Если *j* опущено или равно `None`, используется `len(s)`. Если *i* больше или равно *j*, срез пуст.3525. Срез *s* от *i* до *j* с шагом *k* определяется как последовательность элементов с индексом `x = i + n*k` таким, что `0 <= n < (j-i)/k`. Иными словами, индексы – это `i`, `i+k`, `i+2*k`, `i+3*k` и так далее, пока не будет достигнуто *j* (но *j* никогда не включается). Если *i* или *j* больше `len(s)`, используется `len(s)`. Если *i* или *j* опущены или равны `None`, они становятся «конечными» значениями (какой именно конец – зависит от знака *k*). Обратите внимание: *k* не может быть нулём. Если *k* равно `None`, оно трактуется как `1`.3536. Если *s* и *t* – строки, то некоторые реализации Python, например CPython, обычно могут выполнять оптимизацию на месте для присваиваний вида `s=s+t` или `s+=t`. При применении такая оптимизация делает квадратичное время работы гораздо менее вероятным. Эта оптимизация зависит от версии и реализации. Для кода, чувствительного к производительности, предпочтительнее использовать метод [`str.join()`](https://python-all.ru/3.0/library/stdtypes.html#str.join), который гарантирует стабильную линейную производительность конкатенации во всех версиях и реализациях.354355### Методы строк356357Строковые объекты поддерживают перечисленные ниже методы. Обратите внимание, что ни один из этих методов не принимает именованные аргументы.358359Кроме того, строки Python поддерживают методы типов последовательностей, описанные в разделе [*Sequence Types – str, bytes, bytearray, list, tuple, range*](https://python-all.ru/3.0/library/stdtypes.html#typesseq). Для вывода форматированных строк см. раздел [*String Formatting*](https://python-all.ru/3.0/library/string.html#string-formatting). Также см. модуль [`re`](https://python-all.ru/3.0/library/re.html#module-re) для строковых функций, основанных на регулярных выражениях.360361#### `[str.capitalize]str.capitalize()`362363Возвращает копию строки, в которой первый символ переведён в верхний регистр.364365#### `[str.center]str.center(width[, fillchar])`366367Возвращает строку длины368369*width*370371, в которой исходная строка располагается по центру. Заполнение выполняется с использованием указанного символа372373*fillchar*374375(по умолчанию пробел).376377#### `[str.count]str.count(sub[, start[, end]])`378379Возвращает количество вхождений подстроки380381*sub*382383в диапазоне \[384385*start*386387,388389*end*390391\]. Необязательные аргументы392393*start*394395и396397*end*398399интерпретируются как в нотации срезов.400401#### `[str.encode]str.encode([encoding[, errors]])`402403Возвращает закодированную версию строки. Кодировкой по умолчанию является текущая стандартная строковая кодировка. Параметр404405*errors*406407может быть задан для выбора другой схемы обработки ошибок. Значение по умолчанию для408409*errors*410411412413`'strict'`414415, то есть ошибки кодирования вызывают416417[`UnicodeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.UnicodeError)418419. Другие возможные значения:420421`'ignore'`422423,424425`'replace'`426427,428429`'xmlcharrefreplace'`430431,432433`'backslashreplace'`434435и любое другое имя, зарегистрированное через436437[`codecs.register_error()`](https://python-all.ru/3.0/library/codecs.html#codecs.register_error)438439; см. раздел440441[*Базовые классы кодеков*](https://python-all.ru/3.0/library/codecs.html#codec-base-classes)442443. Список возможных кодировок приведён в разделе444445[*Стандартные кодировки*](https://python-all.ru/3.0/library/codecs.html#standard-encodings)446447.448449#### `[str.endswith]str.endswith(suffix[, start[, end]])`450451Возвращает452453`True`454455, если строка заканчивается указанным456457*suffix*458459, иначе возвращает460461`False`462463.464465*suffix*466467также может быть кортежем суффиксов, которые нужно искать. С необязательным468469*start*470471проверка начинается с этой позиции. С необязательным472473*end*474475сравнение останавливается на этой позиции.476477#### `[str.expandtabs]str.expandtabs([tabsize])`478479Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами в зависимости от текущей позиции столбца и заданного размера табуляции. Номер столбца сбрасывается в ноль после каждого перевода строки в строке. Если480481*tabsize*482483не указан, предполагается размер табуляции484485`8`486487символа. Этот метод не обрабатывает другие непечатаемые символы или escape-последовательности.488489#### `[str.find]str.find(sub[, start[, end]])`490491Возвращает наименьший индекс в строке, на котором найдена подстрока492493*sub*494495, при условии, что496497*sub*498499содержится в диапазоне \[500501*start*502503,504505*end*506507\]. Необязательные аргументы508509*start*510511и512513*end*514515интерпретируются как в нотации срезов. Возвращает516517`-1`518519, если520521*sub*522523не найдена.524525#### `[str.format]str.format(format_string, *args, **kwargs)`526527Выполняет операцию форматирования строки. Аргумент *format\_string* может содержать литеральный текст или поля замены, ограниченные фигурными скобками `{}`. Каждое поле замены содержит либо числовой индекс позиционного аргумента, либо имя именованного аргумента. Возвращает копию *format\_string*, в которой каждое поле замены заменено строковым значением соответствующего аргумента.528529```python530>>> "The sum of 1 + 2 is {0}".format(1+2)531'The sum of 1 + 2 is 3'532```533534См. [*Синтаксис форматных строк*](https://python-all.ru/3.0/library/string.html#formatstrings) для описания различных параметров форматирования, которые можно указать в форматных строках.535536#### `[str.index]str.index(sub[, start[, end]])`537538Аналогично539540`find()`541542, но вызывает543544[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)545546, если подстрока не найдена.547548#### `[str.isalnum]str.isalnum()`549550Возвращает True, если все символы в строке являются буквенно-цифровыми и есть хотя бы один символ, иначе False.551552#### `[str.isalpha]str.isalpha()`553554Возвращает True, если все символы в строке являются буквенными и есть хотя бы один символ, иначе False.555556#### `[str.isdecimal]str.isdecimal()`557558Возвращает True, если все символы в строке являются десятичными цифрами и есть хотя бы один символ, иначе False. К десятичным символам относятся цифры, а также все символы, которые можно использовать для образования чисел с основанием 10, например U+0660, ARABIC-INDIC DIGIT ZERO.559560#### `[str.isdigit]str.isdigit()`561562Возвращает True, если все символы в строке являются цифрами и есть хотя бы один символ, иначе False.563564#### `[str.isidentifier]str.isidentifier()`565566Возвращает true, если строка является допустимым идентификатором в соответствии с определением языка, раздел567568[*Идентификаторы и ключевые слова*](https://python-all.ru/3.0/reference/lexical_analysis.html#identifiers)569570.571572#### `[str.islower]str.islower()`573574Возвращает True, если все буквенные символы в строке являются строчными и есть хотя бы один такой символ, иначе False.575576#### `[str.isnumeric]str.isnumeric()`577578Возвращает True, если все символы в строке являются числовыми и есть хотя бы один символ, иначе False. К числовым символам относятся цифры, а также все символы, обладающие свойством Unicode numeric value, например U+2155, VULGAR FRACTION ONE FIFTH.579580#### `[str.isprintable]str.isprintable()`581582Возвращает true, если все символы строки являются печатаемыми или строка пуста, иначе false. Непечатаемые символы – это те, которые определены в базе данных Unicode как «Other» или «Separator», за исключением пробела ASCII (0x20), который считается печатаемым. (Обратите внимание, что печатаемые символы в данном контексте – это те, которые не должны экранироваться при вызове583584[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)585586для строки. Это не влияет на обработку строк, записываемых в587588[`sys.stdout`](https://python-all.ru/3.0/library/sys.html#sys.stdout)589590или591592[`sys.stderr`](https://python-all.ru/3.0/library/sys.html#sys.stderr)593594.)595596#### `[str.isspace]str.isspace()`597598Возвращает true, если строка содержит только пробельные символы и длина строки не менее одного символа; в противном случае – false.599600#### `[str.istitle]str.istitle()`601602Возвращает true, если строка является строкой в заглавном регистре (titlecased) и есть хотя бы один символ, например прописные символы могут следовать только за символами без регистра, а строчные – только за символами с регистром. Иначе возвращает false.603604#### `[str.isupper]str.isupper()`605606Возвращает true, если все буквенные символы в строке являются заглавными и есть хотя бы один буквенный символ; в противном случае – false.607608#### `[str.join]str.join(seq)`609610Возвращает строку, полученную объединением строк из последовательности611612*seq*613614. Если в615616*seq*617618есть какие-либо нестроковые значения, включая объекты619620[`bytes`](https://python-all.ru/3.0/library/functions.html#bytes)621622, будет возбуждено623624[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)625626. Разделителем между элементами служит строка, предоставляющая данный метод.627628#### `[str.ljust]str.ljust(width[, fillchar])`629630Возвращает строку, выровненную по левому краю в строке длины631632*width*633634. Заполнение выполняется с использованием указанного635636*fillchar*637638(по умолчанию – пробел). Исходная строка возвращается, если639640*width*641642меньше643644`len(s)`645646.647648#### `[str.lower]str.lower()`649650Возвращает копию строки, преобразованную в нижний регистр.651652#### `[str.lstrip]str.lstrip([chars])`653654Возвращает копию строки с удалёнными начальными символами. Аргумент *chars* – это строка, задающая набор удаляемых символов. Если он опущен или равен `None`, аргумент *chars* по умолчанию удаляет пробельные символы. Аргумент *chars* не является префиксом; удаляются все комбинации его значений:655656```python657>>> '   spacious   '.lstrip()658'spacious   '659>>> 'www.example.com'.lstrip('cmowz.')660'example.com'661```662663#### `[str.maketrans]str.maketrans(x[, y[, z]])`664665Этот статический метод возвращает таблицу перевода, пригодную для использования в [`str.translate()`](https://python-all.ru/3.0/library/stdtypes.html#str.translate).666667Если передан только один аргумент, это должен быть словарь, отображающий коды Unicode (целые числа) или символы (строки длины 1) в коды Unicode, строки (произвольной длины) или None. Ключи-символы при этом будут преобразованы в коды.668669Если передано два аргумента, они должны быть строками одинаковой длины, и в результирующем словаре каждый символ из x будет сопоставлен символу на той же позиции в y. Если есть третий аргумент, это должна быть строка, символы которой будут сопоставлены None в результате.670671#### `[str.partition]str.partition(sep)`672673Разделяет строку по первому вхождению674675*sep*676677и возвращает кортеж из трёх элементов: часть до разделителя, сам разделитель и часть после разделителя. Если разделитель не найден, возвращает кортеж из трёх элементов, содержащий саму строку и две пустые строки.678679#### `[str.replace]str.replace(old, new[, count])`680681Возвращает копию строки, в которой все вхождения подстроки682683*old*684685заменены на686687*new*688689. Если задан необязательный аргумент690691*count*692693, заменяются только первые694695*count*696697вхождений.698699#### `[str.rfind]str.rfind(sub[, start[, end]])`700701Возвращает наибольший индекс в строке, на котором найдена подстрока702703*sub*704705, так что706707*sub*708709содержится в s\[start,end\]. Необязательные аргументы710711*start*712713и714715*end*716717интерпретируются как в записи среза. В случае неудачи возвращает718719`-1`720721.722723#### `[str.rindex]str.rindex(sub[, start[, end]])`724725Как726727`rfind()`728729, но возбуждает730731[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)732733, если подстрока734735*sub*736737не найдена.738739#### `[str.rjust]str.rjust(width[, fillchar])`740741Возвращает строку, выровненную по правому краю в строке длины742743*width*744745. Заполнение выполняется с использованием указанного746747*fillchar*748749(по умолчанию – пробел). Исходная строка возвращается, если750751*width*752753меньше754755`len(s)`756757.758759#### `[str.rpartition]str.rpartition(sep)`760761Разделяет строку по последнему вхождению762763*sep*764765и возвращает кортеж из трёх элементов: часть до разделителя, сам разделитель и часть после разделителя. Если разделитель не найден, возвращает кортеж из трёх элементов, содержащий две пустые строки и саму строку.766767#### `[str.rsplit]str.rsplit([sep[, maxsplit]])`768769Возвращает список слов в строке, используя770771*sep*772773в качестве строки-разделителя. Если задан774775*maxsplit*776777, выполняется не более778779*maxsplit*780781разбиений, причём самых782783*правых*784785. Если786787*sep*788789не указан или равен790791`None`792793, любая последовательность пробельных символов считается разделителем. За исключением разбиения справа,794795`rsplit()`796797ведёт себя как798799`split()`800801, которая подробно описана ниже.802803#### `[str.rstrip]str.rstrip([chars])`804805Возвращает копию строки с удалёнными конечными символами. Аргумент *chars* – это строка, задающая набор удаляемых символов. Если он опущен или равен `None`, аргумент *chars* по умолчанию удаляет пробельные символы. Аргумент *chars* не является суффиксом; удаляются все комбинации его значений:806807```python808>>> '   spacious   '.rstrip()809'   spacious'810>>> 'mississippi'.rstrip('ipz')811'mississ'812```813814#### `[str.split]str.split([sep[, maxsplit]])`815816Возвращает список слов в строке, используя *sep* в качестве строки-разделителя. Если указан *maxsplit*, выполняется не более *maxsplit* разбиений (таким образом, список будет содержать не более `maxsplit+1` элементов). Если *maxsplit* не указан, то количество разбиений не ограничено (выполняются все возможные разбиения).817818Если указан *sep*, то последовательные разделители не объединяются в один, а считаются ограничителями пустых строк (например, `'1,,2'.split(',')` возвращает `['1', '', '2']`). Аргумент *sep* может состоять из нескольких символов (например, `'1<>2<>3'.split('<>')` возвращает `['1', '2', '3']`). Разбиение пустой строки с указанным разделителем возвращает `['']`.819820Если *sep* не указан или равен `None`, применяется другой алгоритм разбиения: последовательности пробельных символов считаются одним разделителем, и в результате не будет пустых строк в начале или конце, если строка начинается или заканчивается пробелами. Соответственно, разбиение пустой строки или строки, состоящей только из пробелов, с разделителем `None` возвращает `[]`.821822Например, `' 1 2 3 '.split()'` возвращает `['1', '2', '3']`, а `' 1 2 3 '.split(None, 1)` возвращает `['1', '2 3 ']`.823824#### `[str.splitlines]str.splitlines([keepends])`825826Возвращает список строк в строке, разбивая её по границам строк. Символы перевода строки не включаются в результирующий список, если только827828*keepends*829830не задан и не равен true.831832#### `[str.startswith]str.startswith(prefix[, start[, end]])`833834Возвращает835836`True`837838, если строка начинается с префикса839840*prefix*841842, иначе возвращает843844`False`845846.847848*prefix*849850также может быть кортежем искомых префиксов. С необязательным851852*start*853854проверка начинается с указанной позиции. С необязательным855856*end*857858сравнение строки завершается на указанной позиции.859860#### `[str.strip]str.strip([chars])`861862Возвращает копию строки с удалёнными ведущими и завершающими символами. Аргумент *chars* – строка, задающая набор удаляемых символов. Если он опущен или равен `None`, аргумент *chars* по умолчанию удаляет пробельные символы. Аргумент *chars* не является префиксом или суффиксом; вместо этого удаляются все комбинации его значений:863864```python865>>> '   spacious   '.strip()866'spacious'867>>> 'www.example.com'.strip('cmowz.')868'example'869```870871#### `[str.swapcase]str.swapcase()`872873Возвращает копию строки, в которой символы верхнего регистра преобразованы в нижний и наоборот.874875#### `[str.title]str.title()`876877Возвращает версию строки, где каждое слово начинается с заглавной буквы, а все остальные буквенные символы – строчные.878879#### `[str.translate]str.translate(map)`880881Возвращает копию *s*, в которой все символы преобразованы с помощью *map*, который должен быть словарём, отображающим коды Unicode (целые числа) в коды Unicode, строки или `None`. Неотображённые символы остаются без изменений. Символы, отображённые на `None`, удаляются.882883Для создания таблицы трансляции из символьных отображений в разных форматах можно использовать [`str.maketrans()`](https://python-all.ru/3.0/library/stdtypes.html#str.maketrans).884885> **Примечание**886>887> Ещё более гибкий подход – создать собственный кодек отображения символов с помощью модуля [`codecs`](https://python-all.ru/3.0/library/codecs.html#module-codecs) (см. `encodings.cp1251` в качестве примера).888889#### `[str.upper]str.upper()`890891Возвращает копию строки, преобразованную в верхний регистр.892893#### `[str.zfill]str.zfill(width)`894895Возвращает числовую строку, дополненную слева нулями до длины896897*width*898899. Знаковый префикс обрабатывается корректно. Исходная строка возвращается, если900901*width*902903меньше904905`len(s)`906907.908909### Устаревшие операции форматирования строк910911> **Примечание**912>913> Описанные здесь операции форматирования устарели и могут быть удалены в будущих версиях Python. В новом коде используйте [*новое форматирование строк*](https://python-all.ru/3.0/library/string.html#string-formatting).914915У строковых объектов есть одна уникальная встроенная операция: оператор `%` (остаток от деления). Также известен как оператор строкового *форматирования* или *интерполяции*. Если заданы `format % values` (где *format* – это строка), спецификации преобразования `%` в *format* заменяются нулём или более элементами из *values*. Эффект аналогичен использованию `sprintf` в языке C.916917Если *format* требует один аргумент, то *values* может быть одним объектом, не являющимся кортежем. [\[4\]](https://python-all.ru/3.0/library/stdtypes.html#id11) В противном случае *values* должен быть кортежем с количеством элементов, точно указанным в строке формата, или одним объектом отображения (например, словарём).918919Спецификатор преобразования содержит два или более символа и состоит из следующих компонентов, которые должны располагаться в указанном порядке:9209211. Символ `'%'`, обозначающий начало спецификатора.9222. Ключ отображения (необязательно), состоящий из последовательности символов в скобках (например, `(somename)`).9233. Флаги преобразования (необязательно), влияющие на результат для некоторых типов преобразования.9244. Минимальная ширина поля (необязательно). Если указана как `'*'` (звёздочка), то фактическая ширина берётся из следующего элемента кортежа в *values*, а преобразуемый объект следует после минимальной ширины поля и необязательной точности.9255. Точность (необязательно) задаётся через `'.'` (точку) и следующее за ней значение точности. Если указана как `'*'` (звёздочка), то фактическая ширина считывается из следующего элемента кортежа *values*, а преобразуемое значение следует после точности.9266. Модификатор длины (необязательно).9277. Тип преобразования.928929Когда правый аргумент является словарём (или другим типом отображения), форматы в строке *должны* включать ключ отображения в скобках, указывающий на этот словарь, вставленный сразу после символа `'%'`. Ключ отображения выбирает значение для форматирования из отображения. Например:930931```python932>>> print('%(language)s has %(#)03d quote types.' % \933...       {'language': "Python", "#": 2})934Python has 002 quote types.935```936937В этом случае в формате не должно быть спецификаторов `*` (поскольку они требуют последовательного списка параметров).938939Символы флагов преобразования:940941| Флаг | Значение |942| --- | --- |943| `'#'` | Преобразование значения будет использовать «альтернативную форму» (определённую ниже). |944| `'0'` | Для числовых значений преобразование будет дополняться нулями. |945| `'-'` | Преобразованное значение выравнивается по левому краю (переопределяет преобразование `'0'`, если указаны оба). |946| `' '` | (пробел) Перед положительным числом (или пустой строкой), полученным в результате знакового преобразования, следует оставлять пробел. |947| `'+'` | Знак (`'+'` или `'-'`) будет предшествовать преобразованию (переопределяет флаг «пробел»). |948949Модификатор длины (`h`, `l` или `L`) может присутствовать, но игнорируется, так как не нужен для Python – например, `%ld` идентично `%d`.950951Типы преобразования:952953| Преобразование | Значение | Примечания |954| --- | --- | --- |955| `'d'` | Десятичное целое со знаком. |  |956| `'i'` | Десятичное целое со знаком. |  |957| `'o'` | Восьмеричное значение со знаком. | (1) |958| `'u'` | Устаревший тип – идентичен `'d'`. | (7) |959| `'x'` | Шестнадцатеричное со знаком (строчные буквы). | (2) |960| `'X'` | Шестнадцатеричное со знаком (заглавные буквы). | (2) |961| `'e'` | Экспоненциальный формат чисел с плавающей точкой (строчные буквы). | (3) |962| `'E'` | Экспоненциальный формат чисел с плавающей точкой (заглавные буквы). | (3) |963| `'f'` | Десятичный формат чисел с плавающей точкой. | (3) |964| `'F'` | Десятичный формат чисел с плавающей точкой. | (3) |965| `'g'` | Формат чисел с плавающей точкой. Использует экспоненциальный формат со строчными буквами, если показатель степени меньше −4 или не меньше точности, в противном случае – десятичный формат. | (4) |966| `'G'` | Формат чисел с плавающей точкой. Использует экспоненциальный формат с заглавными буквами, если показатель степени меньше −4 или не меньше точности, в противном случае – десятичный формат. | (4) |967| `'c'` | Один символ (принимает целое число или строку из одного символа). |  |968| `'r'` | Строка (преобразует любой объект Python с помощью [`repr()`](https://python-all.ru/3.0/library/functions.html#repr)). | (5) |969| `'s'` | Строка (преобразует любой объект Python с помощью [`str()`](https://python-all.ru/3.0/library/functions.html#str)). |  |970| `'%'` | Ни один аргумент не преобразуется, результатом является символ `'%'` в итоговом выводе. |  |971972Примечания:9739741. Альтернативная форма приводит к вставке ведущего нуля (`'0'`) между левым заполнением и форматированным числом, если первый символ результата ещё не является нулём.9752. Альтернативная форма приводит к вставке ведущего `'0x'` или `'0X'` (в зависимости от того, использовался ли формат `'x'` или `'X'`) между левым заполнением и форматированным числом, если первый символ результата ещё не является нулём.9763. Альтернативная форма всегда включает десятичную точку в результат, даже если после неё нет цифр.977978   Точность определяет количество цифр после десятичной точки; по умолчанию – 6.9794. Альтернативная форма всегда включает десятичную точку в результат, а конечные нули не удаляются, как это было бы в противном случае.980981   Точность определяет количество значащих цифр до и после десятичной точки; по умолчанию – 6.9825. Точность определяет максимальное количество используемых символов.9839847. См. [**PEP 237**](https://python-all.ru/3.0/library/stdtypes.html).985986Поскольку строки Python имеют явную длину, преобразования `%s` не предполагают, что `'\0'` является концом строки.987988В целях безопасности точность чисел с плавающей запятой ограничена 50; преобразования `%f` для чисел, абсолютное значение которых превышает 1e25, заменяются на преобразования `%g`. [\[5\]](https://python-all.ru/3.0/library/stdtypes.html#id12) Все остальные ошибки вызывают исключения.989990Дополнительные строковые операции определены в стандартных модулях [`string`](https://python-all.ru/3.0/library/string.html#module-string) и [`re`](https://python-all.ru/3.0/library/re.html#module-re).991992### Тип диапазона993994Тип [`range`](https://python-all.ru/3.0/library/functions.html#range) – это неизменяемая последовательность, обычно используемая для циклических операций. Преимущество типа [`range`](https://python-all.ru/3.0/library/functions.html#range) заключается в том, что объект [`range`](https://python-all.ru/3.0/library/functions.html#range) всегда занимает одинаковый объём памяти, независимо от размера диапазона, который он представляет. Каких-либо постоянных преимуществ в производительности нет.995996Объекты range имеют очень мало поведения: они поддерживают только индексацию, итерацию и функцию [`len()`](https://python-all.ru/3.0/library/functions.html#len).997998### Изменяемые типы последовательностей9991000Объекты list и bytearray поддерживают дополнительные операции, позволяющие изменять объект на месте. Другие изменяемые типы последовательностей (если они будут добавлены в язык) также должны поддерживать эти операции. Строки и кортежи являются неизменяемыми типами последовательностей: такие объекты нельзя изменить после создания. Для изменяемых типов последовательностей определены следующие операции (где *x* – произвольный объект).10011002Обратите внимание: хотя списки допускают элементы любого типа, «элементы» объекта bytearray – это целые числа в диапазоне 0 \<= x \< 256.10031004| Операция | Результат | Примечания |1005| --- | --- | --- |1006| `s[i] = x` | элемент *i* из *s* заменяется на *x* |  |1007| `s[i:j] = t` | срез *s* от *i* до *j* заменяется содержимым итерируемого объекта *t* |  |1008| `del s[i:j]` | то же, что `s[i:j] = []` |  |1009| `s[i:j:k] = t` | элементы `s[i:j:k]` заменяются элементами *t* | (1) |1010| `del s[i:j:k]` | удаляет элементы `s[i:j:k]` из списка |  |1011| `s.append(x)` | то же, что и `s[len(s):len(s)] = [x]` |  |1012| `s.extend(x)` | то же, что и `s[len(s):len(s)] = x` | (2) |1013| `s.count(x)` | возвращает количество *i*, для которых `s[i] == x` |  |1014| `s.index(x[, i[, j]])` | возвращает наименьшее *k*, такое что `s[k] == x` и `i <= k < j` | (3) |1015| `s.insert(i, x)` | то же, что и `s[i:i] = [x]` | (4) |1016| `s.pop([i])` | то же, что и `x = s[i]; del s[i]; return x` | (5) |1017| `s.remove(x)` | то же, что и `del s[s.index(x)]` | (3) |1018| `s.reverse()` | переворачивает элементы *s* на месте | (6) |1019| `s.sort([key[, reverse]])` | сортирует элементы *s* на месте | (6), (7), (8) |10201021Примечания:102210231. *t* должен иметь ту же длину, что и заменяемый срез.10242. *x* может быть любым итерируемым объектом.10253. Возбуждает [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError), если *x* не найден в *s*. Когда отрицательный индекс передаётся вторым или третьим параметром метода `index()`, к нему добавляется длина последовательности, как для срезов. Если он всё ещё отрицательный, он усекается до нуля, как для срезов.10264. Когда отрицательный индекс передаётся первым параметром методу `insert()`, к нему добавляется длина последовательности, как для срезов. Если он всё ещё отрицательный, он усекается до нуля, как для срезов.10275. Необязательный аргумент *i* по умолчанию равен `-1`, поэтому по умолчанию удаляется и возвращается последний элемент.10286. The `sort()` and `reverse()` methods modify the sequence in place for economy of space when sorting or reversing a large sequence. To remind you that they operate by side effect, they don’t return the sorted or reversed sequence.10297. Метод `sort()` принимает необязательные аргументы для управления сравнениями. Каждый должен быть указан как именованный аргумент.10301031   *key* задаёт функцию одного аргумента, которая используется для извлечения ключа сравнения из каждого элемента списка: `key=str.lower`. Значение по умолчанию – `None`.10321033   *reverse* – логическое значение. Если установлено в `True`, то элементы списка сортируются так, как если бы каждое сравнение было обратным.10341035   Метод `sort()` гарантированно является устойчивым. Сортировка называется устойчивой, если она не меняет относительный порядок элементов, которые считаются равными – это полезно при сортировке в несколько проходов (например, сначала по отделу, затем по уровню зарплаты).10361037   Пока список сортируется, результат попытки изменить или даже проверить его не определён. Реализация на C делает список пустым на время сортировки и возбуждает [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError), если может обнаружить, что список был изменён во время сортировки.10388. Метод `sort()` не поддерживается объектами [`bytearray`](https://python-all.ru/3.0/library/functions.html#bytearray).10391040### Методы байтов и массивов байтов10411042Объекты bytes и bytearray, будучи «строками байтов», имеют все методы, доступные для строк, за исключением `encode()`, [`format()`](https://python-all.ru/3.0/library/functions.html#format) и `isidentifier()`, которые не имеют смысла для этих типов. Для преобразования объектов в строки у них есть метод `decode()`.10431044Если какому-либо из этих методов требуется интерпретировать байты как символы (например, методы `is...()`), предполагается набор символов ASCII.10451046> **Примечание**1047>1048> Методы объектов bytes и bytearray не принимают строки в качестве аргументов, так же как методы строк не принимают байты. Например, нужно писать1049>1050> ```python1051> a = "abc"1052> b = a.replace("a", "f")1053> ```1054>1055> и1056>1057> ```python1058> a = b"abc"1059> b = a.replace(b"a", b"f")1060> ```10611062Типы bytes и bytearray имеют дополнительный метод класса:10631064#### `[bytes.fromhex]bytes.fromhex(string)`10651066#### `bytearray.fromhex(string)`10671068Этот метод класса [`bytes`](https://python-all.ru/3.0/library/functions.html#bytes) возвращает объект bytes или bytearray, декодируя заданный строковый объект. Строка должна содержать две шестнадцатеричные цифры на байт, пробелы игнорируются.10691070```python1071>>> bytes.fromhex('f0 f1f2  ')1072b'\xf0\xf1\xf2'1073```10741075Метод translate отличается по семантике от версии, доступной для строк:10761077#### `[bytes.translate]bytes.translate(table[, delete])`10781079Возвращает копию объекта bytes или bytearray, из которой удалены все байты, входящие в необязательный аргумент *delete*, а оставшиеся байты преобразованы через заданную таблицу перевода, которая должна быть объектом bytes длиной 256.10801081Для создания таблицы перевода можно воспользоваться вспомогательной функцией [`string.maketrans()`](https://python-all.ru/3.0/library/string.html#string.maketrans).10821083Установите аргумент *table* равным `None` для преобразований, которые только удаляют символы:10841085```python1086>>> b'read this short text'.translate(None, b'aeiou')1087b'rd ths shrt txt'1088```10891090## Типы множеств – [`set`](https://python-all.ru/3.0/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset)10911092Объект *set* – это неупорядоченная коллекция уникальных [*хэшируемых*](https://python-all.ru/3.0/glossary.html#term-hashable) объектов. Обычное применение включает проверку принадлежности, удаление дубликатов из последовательности и вычисление математических операций, таких как пересечение, объединение, разность и симметрическая разность. (О других контейнерах см. встроенные классы [`dict`](https://python-all.ru/3.0/library/stdtypes.html#dict), [`list`](https://python-all.ru/3.0/library/functions.html#list) и [`tuple`](https://python-all.ru/3.0/library/functions.html#tuple), а также модуль [`collections`](https://python-all.ru/3.0/library/collections.html#module-collections).)10931094Как и другие коллекции, множества поддерживают `x in set`, `len(set)` и `for x in set`. Будучи неупорядоченной коллекцией, множества не сохраняют позицию элемента или порядок вставки. Соответственно, множества не поддерживают индексацию, срезы или другое поведение, подобное последовательностям.10951096В настоящее время существует два встроенных типа множеств: [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset). Тип [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) является изменяемым – содержимое можно менять с помощью методов `add()` и `remove()`. Поскольку он изменяемый, у него нет хеш-значения, и его нельзя использовать ни в качестве ключа словаря, ни в качестве элемента другого множества. Тип [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset) является неизменяемым и [*хешируемым*](https://python-all.ru/3.0/glossary.html#term-hashable) – его содержимое не может быть изменено после создания; поэтому его можно использовать в качестве ключа словаря или элемента другого множества.10971098Конструкторы обоих классов работают одинаково:10991100#### `[set]class set([iterable])`11011102#### `class frozenset([iterable])`11031104Возвращает новый объект set или frozenset, элементы которого берутся из *iterable*. Элементы множества должны быть хэшируемыми. Для представления множеств множеств внутренние множества должны быть объектами [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset). Если *iterable* не указан, возвращается новое пустое множество.11051106Instances of [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) and [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset) provide the following operations:11071108#### `len(s)`11091110Return the cardinality of set11111112*s*11131114.11151116#### `x in s`11171118Проверяет принадлежность11191120*x*11211122множеству11231124*s*11251126.11271128#### `x not in s`11291130Проверяет отсутствие11311132*x*11331134в множестве11351136*s*11371138.11391140#### `[set.isdisjoint]isdisjoint(other)`11411142Возвращает True, если множество не имеет общих элементов с11431144*other*11451146. Множества являются непересекающимися тогда и только тогда, когда их пересечение является пустым множеством.11471148#### `[set.issubset]issubset(other)`11491150#### `set <= other`11511152Проверяет, принадлежит ли каждый элемент множества множеству11531154*other*11551156.11571158#### `set < other`11591160Проверяет, является ли множество истинным подмножеством11611162*other*11631164, то есть11651166`set <= other и set != other`11671168.11691170#### `[set.issuperset]issuperset(other)`11711172#### `set >= other`11731174Проверяет, принадлежит ли каждый элемент11751176*other*11771178множеству.11791180#### `set > other`11811182Проверяет, является ли множество истинным надмножеством11831184*other*11851186, то есть11871188`set >= other и set != other`11891190.11911192#### `[set.union]union(other, ...)`11931194#### `set | other | ...`11951196Возвращает новое множество, содержащее элементы из исходного множества и всех остальных.11971198#### `[set.intersection]intersection(other, ...)`11991200#### `set & other & ...`12011202Возвращает новое множество, содержащее элементы, общие для исходного множества и всех остальных.12031204#### `[set.difference]difference(other, ...)`12051206#### `set - other - ...`12071208Возвращает новое множество, содержащее элементы исходного множества, которых нет в других.12091210#### `[set.symmetric_difference]symmetric_difference(other)`12111212#### `set ^ other`12131214Возвращает новое множество, содержащее элементы, которые есть либо в исходном множестве, либо в12151216*other*12171218, но не в обоих.12191220#### `[set.copy]copy()`12211222Возвращает новое множество с поверхностной копией12231224*s*12251226.12271228Обратите внимание, что неоператорные версии методов `union()`, `intersection()`, `difference()` и `symmetric_difference()`, `issubset()` и `issuperset()` принимают любой итерируемый объект в качестве аргумента. В отличие от них, их операторные аналоги требуют, чтобы аргументы были множествами. Это исключает подверженные ошибкам конструкции вроде `set('abc') & 'cbs'` в пользу более читаемого `set('abc').intersection('cbs')`.12291230Both [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) and [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset) support set to set comparisons. Two sets are equal if and only if every element of each set is contained in the other (each is a subset of the other). A set is less than another set if and only if the first set is a proper subset of the second set (is a subset, but is not equal). A set is greater than another set if and only if the first set is a proper superset of the second set (is a superset, but is not equal).12311232Instances of [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) are compared to instances of [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset) based on their members. For example, `set('abc') == frozenset('abc')` returns `True` and so does `set('abc') in set([frozenset('abc')])`.12331234Сравнения на подмножество и равенство не обобщаются до функции полного упорядочивания. Например, любые два непересекающихся множества не равны и не являются подмножествами друг друга, поэтому *all* из следующих возвращают `False`: `a<b`, `a==b` или `a>b`.12351236Поскольку множества определяют только частичный порядок (отношения подмножеств), результат метода `list.sort()` для списков множеств не определён.12371238Элементы множества, как и ключи словаря, должны быть [*хэшируемыми*](https://python-all.ru/3.0/glossary.html#term-hashable).12391240Бинарные операции, в которых смешиваются экземпляры [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset), возвращают тип первого операнда. Например: `frozenset('ab') | set('bc')` возвращает экземпляр [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset).12411242В следующей таблице перечислены операции, доступные для [`set`](https://python-all.ru/3.0/library/stdtypes.html#set), которые не применяются к неизменяемым экземплярам [`frozenset`](https://python-all.ru/3.0/library/stdtypes.html#frozenset):12431244#### `[set.update]update(other, ...)`12451246#### `set |= other | ...`12471248Обновляет множество, добавляя элементы из12491250*other*12511252.12531254#### `[set.intersection_update]intersection_update(other, ...)`12551256#### `set &= other & ...`12571258Обновляет множество, оставляя только элементы, которые есть в нём и в12591260*other*12611262.12631264#### `[set.difference_update]difference_update(other, ...)`12651266#### `set -= other | ...`12671268Обновляет множество, удаляя элементы, найденные в других.12691270#### `[set.symmetric_difference_update]symmetric_difference_update(other)`12711272#### `set ^= other`12731274Обновляет множество, оставляя только элементы, которые есть в одном из множеств, но не в обоих.12751276#### `[set.add]add(elem)`12771278Добавляет элемент12791280*elem*12811282в множество.12831284#### `[set.remove]remove(elem)`12851286Удаляет элемент12871288*elem*12891290из множества. Вызывает12911292[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)12931294, если12951296*elem*12971298не содержится во множестве.12991300#### `[set.discard]discard(elem)`13011302Удаляет элемент13031304*elem*13051306из множества, если он присутствует.13071308#### `[set.pop]pop()`13091310Удаляет и возвращает произвольный элемент из множества. Вызывает13111312[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)13131314, если множество пусто.13151316#### `[set.clear]clear()`13171318Удаляет все элементы из множества.13191320Обратите внимание, что неоператорные версии методов `update()`, `intersection_update()`, `difference_update()` и `symmetric_difference_update()` принимают любой итерируемый объект в качестве аргумента.13211322Обратите внимание, что аргумент *elem* для методов [`__contains__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__contains__), `remove()` и `discard()` может быть множеством. Для поддержки поиска эквивалентного frozenset множество *elem* временно изменяется во время поиска, а затем восстанавливается. Во время поиска множество *elem* не следует ни читать, ни изменять, поскольку оно не имеет осмысленного значения.13231324## Типы отображений – [`dict`](https://python-all.ru/3.0/library/stdtypes.html#dict)13251326Объект *отображения* сопоставляет [*хешируемые*](https://python-all.ru/3.0/glossary.html#term-hashable) значения произвольным объектам. Отображения являются изменяемыми объектами. В настоящее время существует только один стандартный тип отображения – *словарь*. (Другие контейнеры см. во встроенных классах [`list`](https://python-all.ru/3.0/library/functions.html#list), [`set`](https://python-all.ru/3.0/library/stdtypes.html#set) и [`tuple`](https://python-all.ru/3.0/library/functions.html#tuple), а также в модуле [`collections`](https://python-all.ru/3.0/library/collections.html#module-collections).)13271328Ключи словаря могут быть *почти* любыми значениями. Значения, которые не являются [*хэшируемыми*](https://python-all.ru/3.0/glossary.html#term-hashable), то есть содержат списки, словари или другие изменяемые типы (которые сравниваются по значению, а не по идентичности объекта), не могут использоваться в качестве ключей. Числовые типы, используемые в качестве ключей, подчиняются обычным правилам числового сравнения: если два числа равны (например, `1` и `1.0`), то их можно взаимозаменяемо использовать для индексации одной и той же записи словаря. (Однако имейте в виду, что поскольку компьютеры хранят числа с плавающей запятой как приближенные значения, обычно неразумно использовать их в качестве ключей словаря.)13291330Словари можно создать, поместив разделённый запятыми список пар `ключ: значение` в фигурные скобки, например: `{'jack': 4098, 'sjoerd': 4127}` или `{4098: 'jack', 4127: 'sjoerd'}`, или с помощью конструктора [`dict`](https://python-all.ru/3.0/library/stdtypes.html#dict).13311332#### `[dict]class dict([arg])`13331334Возвращает новый словарь, инициализированный из необязательного позиционного аргумента или набора именованных аргументов. Если аргументы не переданы, возвращается новый пустой словарь. Если позиционный аргумент *arg* является объектом отображения, возвращается словарь, сопоставляющий те же ключи тем же значениям, что и объект отображения. В противном случае позиционный аргумент должен быть последовательностью, контейнером, поддерживающим итерацию, или объектом-итератором. Каждый элемент аргумента также должен быть одного из этих типов и, в свою очередь, содержать ровно два объекта. Первый используется как ключ в новом словаре, а второй – как значение ключа. Если один и тот же ключ встречается более одного раза, в новом словаре сохраняется последнее связанное с ним значение.13351336Если переданы именованные аргументы, сами ключевые слова с соответствующими значениями добавляются в словарь. Если ключ указан как в позиционном аргументе, так и в именованном, то в словаре сохраняется значение из именованного аргумента. Например, все следующие варианты возвращают словарь, равный `{"one": 2, "two": 3}`:13371338- `dict(one=2, two=3)`1339- `dict({'one': 2, 'two': 3})`1340- `dict(zip(('one', 'two'), (2, 3)))`1341- `dict([['two', 3], ['one', 2]])`13421343Первый пример работает только для ключей, являющихся допустимыми идентификаторами Python; остальные работают с любыми допустимыми ключами.13441345Вот операции, которые поддерживают словари (и, следовательно, должны поддерживать пользовательские типы отображений):13461347#### `len(d)`13481349Возвращает количество элементов в словаре13501351*d*13521353.13541355#### `d[key]`13561357Возвращает элемент *d* с ключом *key*. Вызывает [`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError), если *key* отсутствует в отображении.13581359Если подкласс dict определяет метод `__missing__()`, и ключ *key* отсутствует, операция `d[key]` вызывает этот метод с ключом *key* в качестве аргумента. Затем операция `d[key]` возвращает или возбуждает то, что возвращает или возбуждает вызов `__missing__(key)`, если ключ отсутствует. Никакие другие операции или методы не вызывают `__missing__()`. Если `__missing__()` не определен, возбуждается [`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError). `__missing__()` должен быть методом, а не переменной экземпляра. Пример см. в [`collections.defaultdict`](https://python-all.ru/3.0/library/collections.html#collections.defaultdict).13601361#### `d[key] = value`13621363Устанавливает13641365`d[key]`13661367в13681369*value*13701371.13721373#### `del d[key]`13741375Remove13761377`d[key]`13781379from13801381*d*13821383. Raises a13841385[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)13861387if13881389*key*13901391is not in the map.13921393#### `key in d`13941395Возвращает13961397`True`13981399, если14001401*d*14021403содержит ключ14041405*key*14061407, иначе14081409`False`14101411.14121413#### `key not in d`14141415Эквивалентно14161417`not key in d`14181419.14201421#### `[dict.clear]clear()`14221423Удаляет все элементы из словаря.14241425#### `[dict.copy]copy()`14261427Возвращает поверхностную копию словаря.14281429#### `[dict.fromkeys]fromkeys(seq[, value])`14301431Создаёт новый словарь, ключи которого берутся из *seq*, а значения устанавливаются равными *value*.14321433`fromkeys()` – это метод класса, возвращающий новый словарь. *value* по умолчанию равен `None`.14341435#### `[dict.get]get(key[, default])`14361437Возвращает значение для14381439*key*14401441, если14421443*key*14441445есть в словаре, иначе14461447*default*14481449. Если14501451*default*14521453не указан, он по умолчанию равен14541455`None`14561457, так что этот метод никогда не вызывает14581459[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)14601461.14621463#### `[dict.items]items()`14641465Возвращает новое представление элементов словаря (пары14661467`(key, value)`14681469). См. ниже документацию объектов представления.14701471#### `[dict.keys]keys()`14721473Возвращает новое представление ключей словаря. См. ниже документацию объектов представления.14741475#### `[dict.pop]pop(key[, default])`14761477Если14781479*key*14801481есть в словаре, удаляет его и возвращает его значение, иначе возвращает14821483*default*14841485. Если14861487*default*14881489не указан и14901491*key*14921493отсутствует в словаре, вызывается14941495[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)14961497.14981499#### `[dict.popitem]popitem()`15001501Удаляет и возвращает произвольную пару `(key, value)` из словаря.15021503`popitem()` удобен для разрушающего обхода словаря, как это часто используется в алгоритмах над множествами. Если словарь пуст, вызов `popitem()` вызывает [`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError).15041505#### `[dict.setdefault]setdefault(key[, default])`15061507Если15081509*key*15101511есть в словаре, возвращает его значение. Если нет, вставляет15121513*key*15141515со значением15161517*default*15181519и возвращает15201521*default*15221523.15241525*default*15261527по умолчанию равен15281529`None`15301531.15321533#### `[dict.update]update([other])`15341535Обновляет словарь парами ключ/значение из *other*, перезаписывая существующие ключи. Возвращает `None`.15361537> `update()`1538>1539> принимает либо другой словарь, либо итерируемый объект с парами ключ/значение (в виде кортежа или другого итерируемого объекта длиной два). Если указаны именованные аргументы, словарь обновляется этими парами ключ/значение:1540>1541> `d.update(red=1, blue=2)`1542>1543> .15441545#### `[dict.values]values()`15461547Возвращает новое представление значений словаря. См. ниже документацию объектов представления.15481549### Объекты представления словаря15501551Объекты, возвращаемые [`dict.keys()`](https://python-all.ru/3.0/library/stdtypes.html#dict.keys), [`dict.values()`](https://python-all.ru/3.0/library/stdtypes.html#dict.values) и [`dict.items()`](https://python-all.ru/3.0/library/stdtypes.html#dict.items), являются *представлениями*. Они предоставляют динамическое представление содержимого словаря: при изменении словаря представление отражает эти изменения.15521553Представления словаря можно обходить для получения соответствующих данных, а также они поддерживают проверку принадлежности:15541555#### `len(dictview)`15561557Возвращает количество записей в словаре.15581559#### `iter(dictview)`15601561Возвращает итератор по ключам, значениям или элементам (представленным в виде кортежей `(key, value)`) словаря.15621563Ключи и значения итерируются в произвольном порядке, который не является случайным, варьируется в разных реализациях Python и зависит от истории вставок и удалений в словаре. Если представления ключей, значений и элементов итерируются без промежуточных изменений словаря, порядок элементов будет прямо соответствовать друг другу. Это позволяет создавать пары `(value, key)` с помощью [`zip()`](https://python-all.ru/3.0/library/functions.html#zip): `pairs = zip(d.values(), d.keys())`. Другой способ создать тот же список: `pairs = [(v, k) for (k, v) in d.items()]`.15641565#### `x in dictview`15661567Возвращает15681569`True`15701571, если15721573*x*15741575находится среди ключей, значений или элементов базового словаря (в последнем случае15761577*x*15781579должен быть кортежем15801581`(key, value)`15821583).15841585Представления ключей (keys views) подобны множествам, так как их записи уникальны и хешируемы. Если все значения хешируемы, так что пары (ключ, значение) уникальны и хешируемы, то представление элементов (items view) также подобно множеству. (Представления значений не считаются подобными множеству, так как записи обычно не уникальны.) Тогда доступны следующие операции над множествами (под «other» подразумевается другое представление или множество):15861587#### `dictview & other`15881589Возвращает пересечение представления словаря и другого объекта в виде нового множества.15901591#### `dictview | other`15921593Возвращает объединение представления словаря и другого объекта в виде нового множества.15941595#### `dictview - other`15961597Возвращает разность между представлением словаря и другим объектом (все элементы в15981599*dictview*16001601, которых нет в16021603*other*16041605) в виде нового множества.16061607#### `dictview ^ other`16081609Возвращает симметрическую разность (все элементы, находящиеся либо в16101611*dictview*16121613, либо в16141615*other*16161617, но не в обоих) представления словаря и другого объекта в виде нового множества.16181619Пример использования представления словаря:16201621```python1622>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}1623>>> keys = dishes.keys()1624>>> values = dishes.values()16251626>>> # итерация1627>>> n = 01628>>> for val in values:1629...     n += val1630>>> print(n)163150416321633>>> # ключи и значения перебираются в одном и том же порядке1634>>> list(keys)1635['eggs', 'bacon', 'sausage', 'spam']1636>>> list(values)1637[2, 1, 1, 500]16381639>>> # объекты представления динамичны и отражают изменения словаря1640>>> del dishes['eggs']1641>>> del dishes['sausage']1642>>> list(keys)1643['spam', 'bacon']16441645>>> # операции над множествами1646>>> keys & {'eggs', 'bacon', 'salad'}1647{'bacon'}1648```16491650## Объекты файлов16511652Файловые объекты реализованы с помощью пакета `stdio` языка C и могут быть созданы с помощью встроенной функции [`open()`](https://python-all.ru/3.0/library/functions.html#open). Некоторые другие встроенные функции и методы также возвращают файловые объекты, например `os.popen()` и [`os.fdopen()`](https://python-all.ru/3.0/library/os.html#os.fdopen), а также метод `makefile()` объектов сокетов. Временные файлы можно создавать с помощью модуля [`tempfile`](https://python-all.ru/3.0/library/tempfile.html#module-tempfile), а высокоуровневые операции с файлами, такие как копирование, перемещение и удаление файлов и каталогов, выполняются с помощью модуля [`shutil`](https://python-all.ru/3.0/library/shutil.html#module-shutil).16531654Когда файловая операция завершается ошибкой по причине, связанной с вводом-выводом, возникает исключение [`IOError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IOError). Сюда входят случаи, когда операция не определена по какой-либо причине, например `seek()` на устройстве tty или запись в файл, открытый для чтения.16551656Файлы имеют следующие методы:16571658#### `[file.close]file.close()`16591660Закрывает файл. Закрытый файл нельзя больше читать или записывать. Любая операция, требующая, чтобы файл был открыт, вызовет [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError) после закрытия файла. Допускается вызов `close()` более одного раза.16611662Можно избежать явного вызова этого метода, если использовать оператор [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with). Например, следующий код автоматически закроет *f* при выходе из блока [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with):16631664```python1665from __future__ import with_statement # This isn't required in Python 2.616661667with open("hello.txt") as f:1668    for line in f:1669        print(line)1670```16711672В более старых версиях Python для достижения того же эффекта приходилось делать так:16731674```python1675f = open("hello.txt")1676try:1677    for line in f:1678        print(line)1679finally:1680    f.close()1681```16821683> **Примечание**1684>1685> Не все «файлоподобные» типы в Python поддерживают использование в качестве менеджера контекста для оператора [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with). Если ваш код должен работать с любым файлоподобным объектом, можно использовать функцию [`contextlib.closing()`](https://python-all.ru/3.0/library/contextlib.html#contextlib.closing) вместо непосредственного использования объекта.16861687#### `[file.flush]file.flush()`16881689Сбрасывает внутренний буфер, подобно16901691`fflush`16921693из16941695`stdio`16961697. Для некоторых файлоподобных объектов эта операция может ничего не делать.16981699#### `[file.fileno]file.fileno()`17001701Возвращает целочисленный «файловый дескриптор», используемый нижележащей реализацией для запроса операций ввода-вывода у операционной системы. Это может быть полезно для других низкоуровневых интерфейсов, работающих с файловыми дескрипторами, таких как модуль [`fcntl`](https://python-all.ru/3.0/library/fcntl.html#module-fcntl) или [`os.read()`](https://python-all.ru/3.0/library/os.html#os.read) и подобные.17021703> **Примечание**1704>1705> Файлоподобные объекты, у которых нет реального файлового дескриптора, *не* должны предоставлять этот метод!17061707#### `[file.isatty]file.isatty()`17081709Возвращает `True`, если файл подключен к tty-подобному устройству, иначе `False`.17101711> **Примечание**1712>1713> Если файлоподобный объект не связан с реальным файлом, этот метод *не* следует реализовывать.17141715#### `[file.__next__]file.__next__()`17161717Файловый объект является собственным итератором; например,17181719`iter(f)`17201721возвращает17221723*f*17241725(если только17261727*f*17281729не закрыт). Когда файл используется как итератор, обычно в цикле17301731[`for`](https://python-all.ru/3.0/reference/compound_stmts.html#for)17321733(например,17341735`for line in f: print(line)`17361737), метод17381739`__next__()`17401741вызывается многократно. Этот метод возвращает следующую строку ввода или возбуждает17421743[`StopIteration`](https://python-all.ru/3.0/library/exceptions.html#exceptions.StopIteration)17441745при достижении EOF, если файл открыт для чтения (поведение не определено, если файл открыт для записи). Чтобы сделать цикл17461747[`for`](https://python-all.ru/3.0/reference/compound_stmts.html#for)17481749наиболее эффективным способом перебора строк файла (очень распространённая операция), метод17501751`__next__()`17521753использует скрытый буфер упреждающего чтения. Вследствие использования этого буфера комбинирование17541755`__next__()`17561757с другими файловыми методами (например,17581759`readline()`17601761) работает некорректно. Однако использование17621763`seek()`17641765для перемещения файла на абсолютную позицию сбрасывает буфер упреждающего чтения.17661767#### `[file.read]file.read([size])`17681769Читает не более17701771*size*17721773байт из файла (меньше, если чтение достигает EOF до получения17741775*size*17761777байт). Если аргумент17781779*size*17801781отрицательный или опущен, читает все данные до достижения EOF. Байты возвращаются в виде строкового объекта. Пустая строка возвращается, если EOF встречается сразу. (Для некоторых файлов, например tty, имеет смысл продолжать чтение после достижения EOF.) Обратите внимание, что этот метод может вызывать нижележащую C-функцию17821783`fread`17841785более одного раза, пытаясь получить как можно больше байт, близких к17861787*size*17881789. Также учтите, что в неблокирующем режиме может быть возвращено меньше данных, чем запрошено, даже если параметр17901791*size*17921793не был указан.17941795#### `[file.readline]file.readline([size])`17961797Читает одну полную строку из файла. Символ перевода строки в конце сохраняется в строке (но может отсутствовать, если файл заканчивается неполной строкой). [\[6\]](https://python-all.ru/3.0/library/stdtypes.html#id13) Если аргумент *size* задан и неотрицателен, это максимальное количество байт (включая завершающий перевод строки), и может быть возвращена неполная строка. Пустая строка возвращается *только* при немедленном достижении EOF.17981799> **Примечание**1800>1801> В отличие от `fgets` из `stdio`, возвращаемая строка содержит нулевые символы (`'\0'`), если они встречаются во входных данных.18021803#### `[file.readlines]file.readlines([sizehint])`18041805Читает до EOF, используя18061807`readline()`18081809, и возвращает список прочитанных таким образом строк. Если присутствует необязательный аргумент18101811*sizehint*18121813, вместо чтения до EOF читаются целые строки, составляющие приблизительно18141815*sizehint*18161817байт (возможно, после округления до размера внутреннего буфера). Объекты, реализующие файлоподобный интерфейс, могут игнорировать18181819*sizehint*18201821, если он не может быть реализован или не может быть реализован эффективно.18221823#### `[file.seek]file.seek(offset[, whence])`18241825Устанавливает текущую позицию в файле, подобно `fseek` из `stdio`. Аргумент *whence* необязателен и по умолчанию равен `os.SEEK_SET` или `0` (абсолютное позиционирование); другие значения – `os.SEEK_CUR` или `1` (смещение относительно текущей позиции) и `os.SEEK_END` или `2` (смещение относительно конца файла). Возвращаемого значения нет.18261827Например, `f.seek(2, os.SEEK_CUR)` сдвигает позицию на два, а `f.seek(-3, os.SEEK_END)` устанавливает позицию на третью с конца.18281829Обратите внимание: если файл открыт для добавления (режим `'a'` или `'a+'`), любые операции `seek()` будут отменены при следующей записи. Если файл открыт только для записи в режиме добавления (режим `'a'`), этот метод по сути ничего не делает, но он остаётся полезным для файлов, открытых в режиме добавления с возможностью чтения (режим `'a+'`). Если файл открыт в текстовом режиме (без `'b'`), допустимы только смещения, возвращённые методом `tell()`. Использование других смещений приводит к неопределённому поведению.18301831Обратите внимание, что не все файловые объекты допускают перемещение (seekable).18321833#### `[file.tell]file.tell()`18341835Возвращает текущую позицию файла, подобно `ftell` из `stdio`.18361837> **Примечание**1838>1839> В Windows `tell()` может возвращать недопустимые значения (после `fgets`) при чтении файлов с переводами строк в стиле Unix. Используйте двоичный режим (`'rb'`), чтобы обойти эту проблему.18401841#### `[file.truncate]file.truncate([size])`18421843Урезает размер файла. Если указан необязательный аргумент18441845*size*18461847, файл урезается (не более) до этого размера. По умолчанию размер равен текущей позиции. Текущая позиция файла не меняется. Обратите внимание: если указанный размер превышает текущий размер файла, результат зависит от платформы: возможны варианты, что файл останется без изменений, увеличится до указанного размера (как будто заполнен нулями) или увеличится до указанного размера с неопределённым новым содержимым. Доступность: Windows, многие варианты Unix.18481849#### `[file.write]file.write(str)`18501851Записывает строку в файл. Из-за буферизации строка может фактически не появиться в файле, пока не будет вызван метод `flush()` или `close()`.18521853Значение возвращаемого значения определено не для всех файлоподобных объектов. Некоторые (в основном низкоуровневые) файлоподобные объекты могут возвращать количество фактически записанных байтов, другие возвращают `None`.18541855#### `[file.writelines]file.writelines(sequence)`18561857Записывает последовательность строк в файл. Последовательность может быть любым итерируемым объектом, порождающим строки, обычно списком строк. Возвращаемое значение отсутствует. (Название выбрано в соответствии с18581859`readlines()`18601861;18621863`writelines()`18641865не добавляет разделители строк.)18661867Файлы поддерживают протокол итератора. Каждая итерация возвращает тот же результат, что и `file.readline()`, и итерация завершается, когда метод `readline()` возвращает пустую строку.18681869Файловые объекты также предоставляют ряд других интересных атрибутов. Они не обязательны для файлоподобных объектов, но должны быть реализованы, если имеют смысл для конкретного объекта.18701871#### `[file.closed]file.closed`18721873bool, указывающий текущее состояние файлового объекта. Это атрибут только для чтения; метод18741875`close()`18761877изменяет значение. Может быть недоступен на всех файлоподобных объектах.18781879#### `[file.encoding]file.encoding`18801881Кодировка, используемая этим файлом. Когда строки записываются в файл, они преобразуются в байтовые строки с использованием этой кодировки. Кроме того, когда файл подключён к терминалу, атрибут указывает кодировку, которую терминал, вероятно, использует (эта информация может быть неверной, если пользователь неправильно настроил терминал). Атрибут только для чтения и может отсутствовать на всех файлоподобных объектах. Также может быть18821883`None`18841885, в этом случае файл использует системную кодировку по умолчанию для преобразования строк.18861887#### `[file.errors]file.errors`18881889Обработчик ошибок Unicode, используемый совместно с кодировкой.18901891#### `[file.mode]file.mode`18921893Режим ввода-вывода файла. Если файл был создан с помощью встроенной функции18941895[`open()`](https://python-all.ru/3.0/library/functions.html#open)18961897, это будет значение параметра18981899*mode*19001901. Это атрибут только для чтения и может отсутствовать на всех файлоподобных объектах.19021903#### `[file.name]file.name`19041905Если файловый объект был создан с помощью19061907[`open()`](https://python-all.ru/3.0/library/functions.html#open)19081909, то имя файла. В противном случае некоторая строка, указывающая источник файлового объекта, вида19101911`<...>`19121913. Это атрибут только для чтения и может отсутствовать на всех файлоподобных объектах.19141915#### `[file.newlines]file.newlines`19161917Если Python был собран с опцией19181919*--with-universal-newlines*19201921для19221923**configure**19241925(по умолчанию), этот атрибут только для чтения существует, и для файлов, открытых в режиме чтения с универсальными переводами строк, он отслеживает типы символов новой строки, встреченных при чтении файла. Возможные значения:19261927`'\r'`19281929,19301931`'\n'`19321933,19341935`'\r\n'`19361937,19381939`None`19401941(неизвестно, новые строки ещё не читались) или кортеж, содержащий все встреченные типы новых строк, что указывает на то, что были обнаружены разные соглашения о символах новой строки. Для файлов, открытых не в режиме чтения с универсальными новыми строками, значением этого атрибута будет19421943`None`19441945.19461947## Типы memoryview19481949[`memoryview`](https://python-all.ru/3.0/library/stdtypes.html#memoryview) позволяют коду Python обращаться к внутренним данным объекта, поддерживающего протокол буфера, без копирования. Память может интерпретироваться как простые байты или сложные структуры данных.19501951#### `[memoryview]class memoryview(obj)`19521953Создаёт [`memoryview`](https://python-all.ru/3.0/library/stdtypes.html#memoryview), ссылающийся на *obj*. *obj* должен поддерживать протокол буфера. Встроенные объекты, поддерживающие протокол буфера, включают [`bytes`](https://python-all.ru/3.0/library/functions.html#bytes) и [`bytearray`](https://python-all.ru/3.0/library/functions.html#bytearray).19541955`len(view)` возвращает общее количество байтов в memoryview, *view*.19561957[`memoryview`](https://python-all.ru/3.0/library/stdtypes.html#memoryview) поддерживает срезы для доступа к своим данным. Обращение по одному индексу возвращает один байт. Полный срез приводит к созданию подвида:19581959```python1960>>> v = memoryview(b'abcefg')1961>>> v[1]1962b'b'1963>>> v[-1]1964b'g'1965>>> v[1:4]1966<memory at 0x77ab28>1967>>> bytes(v[1:4])1968b'bce'1969>>> v[3:-1]1970<memory at 0x744f18>1971>>> bytes(v[4:-1])1972```19731974Если объект, для которого создано представление памяти, поддерживает изменение своих данных, memoryview поддерживает присваивание по срезу:19751976```python1977>>> data = bytearray(b'abcefg')1978>>> v = memoryview(data)1979>>> v.readonly1980False1981>>> v[0] = 'z'1982>>> data1983bytearray(b'zbcefg')1984>>> v[1:4] = b'123'1985>>> data1986bytearray(b'a123fg')1987>>> v[2] = b'spam'1988Traceback (most recent call last):1989File "<stdin>", line 1, in <module>1990ValueError: cannot modify size of memoryview object1991```19921993Обратите внимание, что размер объекта memoryview не может быть изменён.19941995[`memoryview`](https://python-all.ru/3.0/library/stdtypes.html#memoryview) имеет два метода:19961997#### `[memoryview.tobytes]tobytes()`19981999Возвращает данные в буфере в виде байтовой строки.20002001#### `[memoryview.tolist]tolist()`20022003Возвращает данные из буфера в виде списка целых чисел.20042005```python2006>>> memoryview(b'abc').tolist()2007[97, 98, 99]2008```20092010Также доступно несколько атрибутов только для чтения:20112012#### `[memoryview.format]format`20132014Строка, содержащая формат (в стиле модуля20152016[`struct`](https://python-all.ru/3.0/library/struct.html#module-struct)20172018) для каждого элемента в представлении. По умолчанию это20192020`'B'`20212022, простая байтовая строка.20232024#### `[memoryview.itemsize]itemsize`20252026Размер каждого элемента memoryview в байтах.20272028#### `[memoryview.shape]shape`20292030Кортеж целых чисел длиной20312032[`ndim`](https://python-all.ru/3.0/c-api/buffer.html#ndim)20332034, задающий форму памяти как N-мерный массив.20352036#### `[memoryview.ndim]ndim`20372038Целое число, указывающее количество измерений многомерного массива, которое представляет данный блок памяти.20392040#### `[memoryview.strides]strides`20412042Кортеж целых чисел длиной20432044[`ndim`](https://python-all.ru/3.0/c-api/buffer.html#ndim)20452046, задающий размер в байтах для доступа к каждому элементу по каждому измерению массива.20472048## Типы контекстных менеджеров20492050Оператор [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with) в Python поддерживает концепцию контекста выполнения, определяемого менеджером контекста. Она реализована с помощью двух отдельных методов, которые позволяют классам, определённым пользователем, задавать контекст выполнения: вход в контекст происходит перед выполнением тела оператора, а выход – когда оператор завершается.20512052*Протокол управления контекстом* состоит из пары методов, которые необходимо реализовать в объекте менеджера контекста, чтобы определить контекст выполнения:20532054#### `[contextmanager.__enter__]contextmanager.__enter__()`20552056Входит в контекст выполнения и возвращает либо этот объект, либо другой объект, связанный с контекстом выполнения. Значение, возвращаемое этим методом, привязывается к идентификатору в предложении [`as`](https://python-all.ru/3.0/reference/compound_stmts.html#as) оператора [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with), использующего данный менеджер контекста.20572058Примером менеджера контекста, который возвращает сам себя, является файловый объект. Файловые объекты возвращают себя из \_\_enter\_\_(), чтобы [`open()`](https://python-all.ru/3.0/library/functions.html#open) можно было использовать в качестве контекстного выражения в операторе [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with).20592060Примером менеджера контекста, возвращающего связанный объект, является тот, который возвращается [`decimal.localcontext()`](https://python-all.ru/3.0/library/decimal.html#decimal.localcontext). Эти менеджеры устанавливают активный десятичный контекст в копию исходного десятичного контекста, а затем возвращают копию. Это позволяет вносить изменения в текущий десятичный контекст в теле оператора [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with), не затрагивая код вне оператора [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with).20612062#### `[contextmanager.__exit__]contextmanager.__exit__(exc_type, exc_val, exc_tb)`20632064Выходит из контекста выполнения и возвращает логический флаг, указывающий, следует ли подавить возникшее исключение. Если во время выполнения тела оператора [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with) произошло исключение, аргументы содержат тип исключения, значение и информацию о трассировке. В противном случае все три аргумента равны `None`.20652066Возврат истинного значения из этого метода заставит оператор [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with) подавить исключение и продолжить выполнение с оператора, следующего непосредственно за оператором [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with). В противном случае исключение продолжает распространяться после завершения выполнения этого метода. Исключения, возникающие во время выполнения этого метода, заменят любое исключение, произошедшее в теле оператора [`with`](https://python-all.ru/3.0/reference/compound_stmts.html#with).20672068Переданное исключение никогда не следует явно возбуждать повторно – вместо этого метод должен возвращать ложное значение, показывая, что метод выполнен успешно и не подавляет возникшее исключение. Это позволяет коду управления контекстом (например, `contextlib.nested`) легко определить, завершился ли метод [`__exit__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__exit__) неудачей.20692070Python определяет несколько менеджеров контекста для поддержки простой синхронизации потоков, своевременного закрытия файлов или других объектов и более простого управления активным десятичным контекстом. Конкретные типы не обрабатываются особым образом, помимо реализации протокола управления контекстом. См. модуль [`contextlib`](https://python-all.ru/3.0/library/contextlib.html#module-contextlib) для примеров.20712072Генераторы [*generator*](https://python-all.ru/3.0/glossary.html#term-generator) в Python и декоратор `contextlib.contextfactory` [*decorator*](https://python-all.ru/3.0/glossary.html#term-decorator) предоставляют удобный способ реализовать эти протоколы. Если генераторная функция декорирована декоратором `contextlib.contextfactory`, она вернёт менеджер контекста, реализующий необходимые методы [`__enter__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__exit__), а не итератор, который возвращает не декорированная генераторная функция.20732074Обратите внимание, что в структуре типа для объектов Python в Python/C API нет специального слота для любого из этих методов. Типы расширений, желающие определить эти методы, должны предоставлять их как обычный метод, доступный из Python. По сравнению с накладными расходами на установку контекста выполнения, накладные расходы на один поиск в словаре класса пренебрежимо малы.20752076## Другие встроенные типы20772078Интерпретатор поддерживает несколько других видов объектов. Большинство из них поддерживают только одну или две операции.20792080### Модули20812082Единственная специальная операция над модулем – это доступ к атрибуту: `m.name`, где *m* – это модуль, а *name* обращается к имени, определённому в таблице символов *m*. Атрибутам модуля можно присваивать значения. (Обратите внимание, что оператор [`import`](https://python-all.ru/3.0/reference/simple_stmts.html#import), строго говоря, не является операцией над объектом модуля; `import foo` не требует существования объекта модуля с именем *foo*, скорее он требует (внешнего) *определения* для модуля с именем *foo* где-либо.)20832084Особым членом каждого модуля является `__dict__`. Это словарь, содержащий таблицу символов модуля. Изменение этого словаря фактически изменит таблицу символов модуля, но прямая запись в атрибут `__dict__` невозможна (можно написать `m.__dict__['a'] = 1`, что определяет `m.a` как `1`, но нельзя написать `m.__dict__ = {}`). Изменять `__dict__` напрямую не рекомендуется.20852086Модули, встроенные в интерпретатор, записываются так: `<module 'sys' (built-in)>`. Если загружены из файла, они записываются как `<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>`.20872088### Классы и экземпляры классов20892090См. [*Объекты, значения и типы*](https://python-all.ru/3.0/reference/datamodel.html#objects) и [*Определения классов*](https://python-all.ru/3.0/reference/compound_stmts.html#class).20912092### Функции20932094Объекты функций создаются определениями функций. Единственная операция над объектом функции – это его вызов: `func(argument-list)`.20952096На самом деле существует два вида объектов-функций: встроенные функции и определяемые пользователем функции. Оба поддерживают одну и ту же операцию (вызов функции), но реализация различается, отсюда разные типы объектов.20972098Дополнительную информацию см. в разделе [*Определения функций*](https://python-all.ru/3.0/reference/compound_stmts.html#function).20992100### Методы21012102Методы – это функции, которые вызываются с использованием точечной нотации. Существует две разновидности: встроенные методы (например, `append()` у списков) и методы экземпляров классов. Встроенные методы описываются вместе с типами, которые их поддерживают.21032104Если обратиться к методу (функции, определённой в пространстве имён класса) через экземпляр, получается специальный объект: объект *связанного метода* (также называемый *методом экземпляра*). При вызове он добавляет аргумент `self` в список аргументов. Связанные методы имеют два специальных атрибута только для чтения: `m.__self__` – это объект, над которым выполняется метод, а `m.__func__` – это функция, реализующая метод. Вызов `m(arg-1, arg-2, ..., arg-n)` полностью эквивалентен вызову `m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)`.21052106Как и объекты функций, объекты связанных методов поддерживают получение произвольных атрибутов. Однако, поскольку атрибуты метода на самом деле хранятся в базовом объекте функции (`meth.__func__`), установка атрибутов метода для связанных методов запрещена. Попытка установить атрибут метода приводит к возбуждению [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError). Чтобы установить атрибут метода, необходимо явно задать его на базовом объекте функции:21072108```python2109class C:2110    def method(self):2111        pass21122113c = C()2114c.method.__func__.whoami = 'my name is c'2115```21162117Дополнительную информацию см. в разделе [*Стандартная иерархия типов*](https://python-all.ru/3.0/reference/datamodel.html#types).21182119### Объекты кода21202121Объекты кода используются реализацией для представления «псевдокомпилированного» исполняемого кода Python, например, тела функции. Они отличаются от объектов функций тем, что не содержат ссылки на глобальное окружение выполнения. Объекты кода возвращаются встроенной функцией [`compile()`](https://python-all.ru/3.0/library/functions.html#compile) и могут быть извлечены из объектов функций через их атрибут `__code__`. См. также модуль [`code`](https://python-all.ru/3.0/library/code.html#module-code).21222123Объект кода может быть выполнен или вычислен путём передачи его (вместо строки исходного кода) встроенным функциям [`exec()`](https://python-all.ru/3.0/library/functions.html#exec) или [`eval()`](https://python-all.ru/3.0/library/functions.html#eval).21242125Дополнительную информацию см. в разделе [*Стандартная иерархия типов*](https://python-all.ru/3.0/reference/datamodel.html#types).21262127### Объекты типов21282129Объекты типов представляют различные типы объектов. Тип объекта доступен через встроенную функцию [`type()`](https://python-all.ru/3.0/library/functions.html#type). Над типами не определено специальных операций. Стандартный модуль [`types`](https://python-all.ru/3.0/library/types.html#module-types) определяет имена для всех стандартных встроенных типов.21302131Типы записываются так: `<class 'int'>`.21322133### Объект Null21342135Этот объект возвращается функциями, которые не возвращают значение явно. Он не поддерживает никаких специальных операций. Существует ровно один нулевой объект с именем `None` (встроенное имя).21362137Он записывается как `None`.21382139### Объект многоточия21402141Этот объект обычно используется при срезах (см. [*Slicings*](https://python-all.ru/3.0/reference/expressions.html#slicings)). Он не поддерживает никаких специальных операций. Существует ровно один объект Ellipsis с именем [`Ellipsis`](https://python-all.ru/3.0/library/constants.html#Ellipsis) (встроенное имя).21422143Оно записывается как `Ellipsis` или `...`.21442145### Логические значения21462147Булевы значения – это два константных объекта `False` и `True`. Они используются для представления истинностных значений (хотя другие значения также могут считаться ложными или истинными). В числовом контексте (например, при использовании в качестве аргумента арифметической операции) они ведут себя как целые числа 0 и 1 соответственно. Встроенная функция [`bool()`](https://python-all.ru/3.0/library/functions.html#bool) может использоваться для преобразования любого значения в булево, если это значение может быть интерпретировано как истинностное (см. раздел Проверка истинности выше).21482149Они записываются как `False` и `True` соответственно.21502151### Внутренние объекты21522153См. [*Стандартная иерархия типов*](https://python-all.ru/3.0/reference/datamodel.html#types) для получения этой информации. В нем описываются объекты стековых кадров, объекты трассировки и объекты срезов.21542155## Специальные атрибуты21562157Реализация добавляет несколько специальных атрибутов только для чтения к некоторым типам объектов, где они уместны. Некоторые из них не возвращаются встроенной функцией [`dir()`](https://python-all.ru/3.0/library/functions.html#dir).21582159#### `[object.__dict__]object.__dict__`21602161Словарь или другой отображающий объект, используемый для хранения (изменяемых) атрибутов объекта.21622163#### `[instance.__class__]instance.__class__`21642165Класс, которому принадлежит экземпляр класса.21662167#### `[class.__bases__]class.__bases__`21682169Кортеж базовых классов объекта-класса. Если базовых классов нет, это будет пустой кортеж.21702171#### `[class.__name__]class.__name__`21722173Имя класса или типа.21742175Сноски21762177| [\[1\]](https://python-all.ru/3.0/library/stdtypes.html#id1) | Дополнительную информацию об этих специальных методах можно найти в Справочном руководстве Python ([*Базовая настройка*](https://python-all.ru/3.0/reference/datamodel.html#customization)). |2178| --- | --- |21792180| [\[2\]](https://python-all.ru/3.0/library/stdtypes.html#id2) | Как следствие, список `[1, 2]` считается равным `[1.0, 2.0]`, и аналогично для кортежей. |2181| --- | --- |21822183| [\[3\]](https://python-all.ru/3.0/library/stdtypes.html#id3) | Они должны иметь, поскольку синтаксический анализатор не может определить тип операндов. |2184| --- | --- |21852186| [\[4\]](https://python-all.ru/3.0/library/stdtypes.html#id5) | Чтобы отформатировать только кортеж, следует предоставить одноэлементный кортеж, единственным элементом которого является форматируемый кортеж. |2187| --- | --- |21882189| [\[5\]](https://python-all.ru/3.0/library/stdtypes.html#id6) | Эти числа довольно произвольны. Они предназначены для того, чтобы избежать вывода бесконечных строк бессмысленных цифр, не мешая корректному использованию и не требуя знания точной точности чисел с плавающей запятой на конкретной машине. |2190| --- | --- |21912192| [\[6\]](https://python-all.ru/3.0/library/stdtypes.html#id7) | Преимущество сохранения символа новой строки в том, что возврат пустой строки является однозначным признаком конца файла (EOF). Также можно определить, заканчивается ли последняя строка файла символом новой строки или нет (да, такое бывает!), что может иметь значение, например, при создании точной копии файла во время построчного чтения. |2193| --- | --- |2194