functions.md
1> **Источник:** https://python-all.ru/3.8/library/functions.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Встроенные функции89Интерпретатор Python включает ряд встроенных функций и типов, которые доступны всегда. Они перечислены здесь в алфавитном порядке.1011| | | Встроенные функции | | |12| --- | --- | --- | --- | --- |13| [`abs()`](https://python-all.ru/3.8/library/functions.html#abs) | [`delattr()`](https://python-all.ru/3.8/library/functions.html#delattr) | [`hash()`](https://python-all.ru/3.8/library/functions.html#hash) | [`memoryview()`](https://python-all.ru/3.8/library/functions.html#func-memoryview) | [`set()`](https://python-all.ru/3.8/library/functions.html#func-set) |14| [`all()`](https://python-all.ru/3.8/library/functions.html#all) | [`dict()`](https://python-all.ru/3.8/library/functions.html#func-dict) | [`help()`](https://python-all.ru/3.8/library/functions.html#help) | [`min()`](https://python-all.ru/3.8/library/functions.html#min) | [`setattr()`](https://python-all.ru/3.8/library/functions.html#setattr) |15| [`any()`](https://python-all.ru/3.8/library/functions.html#any) | [`dir()`](https://python-all.ru/3.8/library/functions.html#dir) | [`hex()`](https://python-all.ru/3.8/library/functions.html#hex) | [`next()`](https://python-all.ru/3.8/library/functions.html#next) | [`slice()`](https://python-all.ru/3.8/library/functions.html#slice) |16| [`ascii()`](https://python-all.ru/3.8/library/functions.html#ascii) | [`divmod()`](https://python-all.ru/3.8/library/functions.html#divmod) | [`id()`](https://python-all.ru/3.8/library/functions.html#id) | [`object()`](https://python-all.ru/3.8/library/functions.html#object) | [`sorted()`](https://python-all.ru/3.8/library/functions.html#sorted) |17| [`bin()`](https://python-all.ru/3.8/library/functions.html#bin) | [`enumerate()`](https://python-all.ru/3.8/library/functions.html#enumerate) | [`input()`](https://python-all.ru/3.8/library/functions.html#input) | [`oct()`](https://python-all.ru/3.8/library/functions.html#oct) | [`staticmethod()`](https://python-all.ru/3.8/library/functions.html#staticmethod) |18| [`bool()`](https://python-all.ru/3.8/library/functions.html#bool) | [`eval()`](https://python-all.ru/3.8/library/functions.html#eval) | [`int()`](https://python-all.ru/3.8/library/functions.html#int) | [`open()`](https://python-all.ru/3.8/library/functions.html#open) | [`str()`](https://python-all.ru/3.8/library/functions.html#func-str) |19| [`breakpoint()`](https://python-all.ru/3.8/library/functions.html#breakpoint) | [`exec()`](https://python-all.ru/3.8/library/functions.html#exec) | [`isinstance()`](https://python-all.ru/3.8/library/functions.html#isinstance) | [`ord()`](https://python-all.ru/3.8/library/functions.html#ord) | [`sum()`](https://python-all.ru/3.8/library/functions.html#sum) |20| [`bytearray()`](https://python-all.ru/3.8/library/functions.html#func-bytearray) | [`filter()`](https://python-all.ru/3.8/library/functions.html#filter) | [`issubclass()`](https://python-all.ru/3.8/library/functions.html#issubclass) | [`pow()`](https://python-all.ru/3.8/library/functions.html#pow) | [`super()`](https://python-all.ru/3.8/library/functions.html#super) |21| [`bytes()`](https://python-all.ru/3.8/library/functions.html#func-bytes) | [`float()`](https://python-all.ru/3.8/library/functions.html#float) | [`iter()`](https://python-all.ru/3.8/library/functions.html#iter) | [`print()`](https://python-all.ru/3.8/library/functions.html#print) | [`tuple()`](https://python-all.ru/3.8/library/functions.html#func-tuple) |22| [`callable()`](https://python-all.ru/3.8/library/functions.html#callable) | [`format()`](https://python-all.ru/3.8/library/functions.html#format) | [`len()`](https://python-all.ru/3.8/library/functions.html#len) | [`property()`](https://python-all.ru/3.8/library/functions.html#property) | [`type()`](https://python-all.ru/3.8/library/functions.html#type) |23| [`chr()`](https://python-all.ru/3.8/library/functions.html#chr) | [`frozenset()`](https://python-all.ru/3.8/library/functions.html#func-frozenset) | [`list()`](https://python-all.ru/3.8/library/functions.html#func-list) | [`range()`](https://python-all.ru/3.8/library/functions.html#func-range) | [`vars()`](https://python-all.ru/3.8/library/functions.html#vars) |24| [`classmethod()`](https://python-all.ru/3.8/library/functions.html#classmethod) | [`getattr()`](https://python-all.ru/3.8/library/functions.html#getattr) | [`locals()`](https://python-all.ru/3.8/library/functions.html#locals) | [`repr()`](https://python-all.ru/3.8/library/functions.html#repr) | [`zip()`](https://python-all.ru/3.8/library/functions.html#zip) |25| [`compile()`](https://python-all.ru/3.8/library/functions.html#compile) | [`globals()`](https://python-all.ru/3.8/library/functions.html#globals) | [`map()`](https://python-all.ru/3.8/library/functions.html#map) | [`reversed()`](https://python-all.ru/3.8/library/functions.html#reversed) | [`__import__()`](https://python-all.ru/3.8/library/functions.html#__import__) |26| [`complex()`](https://python-all.ru/3.8/library/functions.html#complex) | [`hasattr()`](https://python-all.ru/3.8/library/functions.html#hasattr) | [`max()`](https://python-all.ru/3.8/library/functions.html#max) | [`round()`](https://python-all.ru/3.8/library/functions.html#round) | |2728#### `abs(x)`2930Возвращает абсолютное значение числа. Аргумент может быть целым числом или числом с плавающей запятой. Если аргумент – комплексное число, возвращается его модуль. Если *x* определяет [`__abs__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__abs__), `abs(x)` возвращает `x.__abs__()`.3132#### `all(iterable)`3334Возвращает `True`, если все элементы *iterable* истинны (или если iterable пуст). Эквивалентно:3536```python37def all(iterable):38 for element in iterable:39 if not element:40 return False41 return True42```4344#### `any(iterable)`4546Возвращает `True`, если хотя бы один элемент *iterable* истинен. Если iterable пуст, возвращает `False`. Эквивалентно:4748```python49def any(iterable):50 for element in iterable:51 if element:52 return True53 return False54```5556#### `ascii(object)`5758Как и [`repr()`](https://python-all.ru/3.8/library/functions.html#repr), возвращает строку, содержащую печатное представление объекта, но экранирует не-ASCII символы в строке, возвращаемой [`repr()`](https://python-all.ru/3.8/library/functions.html#repr), с помощью управляющих последовательностей `\x`, `\u` или `\U`. Это генерирует строку, похожую на возвращаемую [`repr()`](https://python-all.ru/3.8/library/functions.html#repr) в Python 2.5960#### `bin(x)`6162Преобразует целое число в двоичную строку с префиксом «0b». Результат является корректным выражением Python. Если *x* не является объектом Python [`int`](https://python-all.ru/3.8/library/functions.html#int), он должен определять метод [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), возвращающий целое число. Несколько примеров:6364```python65>>> bin(3)66'0b11'67>>> bin(-10)68'-0b1010'69```7071Если префикс «0b» желателен или нет, можно использовать любой из следующих способов.7273```python74>>> format(14, '#b'), format(14, 'b')75('0b1110', '1110')76>>> f'{14:#b}', f'{14:b}'77('0b1110', '1110')78```7980См. также [`format()`](https://python-all.ru/3.8/library/functions.html#format) для получения дополнительной информации.8182#### `class bool([x])`8384Возвращает логическое значение, то есть одно из `True` или `False`. *x* преобразуется с использованием стандартной [процедуры проверки истинности](https://python-all.ru/3.8/library/stdtypes.html#truth). Если *x* равно false или опущено, возвращается `False`; в противном случае возвращается `True`. Класс [`bool`](https://python-all.ru/3.8/library/functions.html#bool) является подклассом [`int`](https://python-all.ru/3.8/library/functions.html#int) (см. [Числовые типы – int, float, complex](https://python-all.ru/3.8/library/stdtypes.html#typesnumeric)). Он не может быть унаследован далее. Его единственными экземплярами являются `False` и `True` (см. [Логические значения](https://python-all.ru/3.8/library/stdtypes.html#bltin-boolean-values)).8586Изменено в версии 3.7: *x* теперь является параметром только для позиционной передачи.8788#### `breakpoint(*args, **kws)`8990Эта функция погружает вас в отладчик в точке вызова. А именно, она вызывает [`sys.breakpointhook()`](https://python-all.ru/3.8/library/sys.html#sys.breakpointhook), передавая `args` и `kws` напрямую. По умолчанию `sys.breakpointhook()` вызывает [`pdb.set_trace()`](https://python-all.ru/3.8/library/pdb.html#pdb.set_trace) без аргументов. В этом случае это просто удобная функция, чтобы не нужно было явно импортировать [`pdb`](https://python-all.ru/3.8/library/pdb.html#module-pdb) или писать много кода для входа в отладчик. Однако [`sys.breakpointhook()`](https://python-all.ru/3.8/library/sys.html#sys.breakpointhook) может быть установлена в другую функцию, и [`breakpoint()`](https://python-all.ru/3.8/library/functions.html#breakpoint) автоматически вызовет её, позволяя войти в отладчик по выбору.9192Вызывает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `builtins.breakpoint` с аргументом `breakpointhook`.9394Добавлено в версии 3.7.9596#### `class bytearray([source[, encoding[, errors]]])`9798Возвращает новый массив байтов. Класс [`bytearray`](https://python-all.ru/3.8/library/stdtypes.html#bytearray) представляет собой изменяемую последовательность целых чисел в диапазоне 0 \<= x \< 256. Он поддерживает большинство обычных методов изменяемых последовательностей, описанных в разделе [Изменяемые типы последовательностей](https://python-all.ru/3.8/library/stdtypes.html#typesseq-mutable), а также большинство методов, которые есть у типа [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes) (см. [Операции с байтами и bytearray](https://python-all.ru/3.8/library/stdtypes.html#bytes-methods)).99100Необязательный параметр *source* можно использовать для инициализации массива несколькими разными способами:101102- Если это *строка*, необходимо также указать параметры *кодировка* (и, опционально, *ошибки*); затем [`bytearray()`](https://python-all.ru/3.8/library/stdtypes.html#bytearray) преобразует строку в байты с помощью [`str.encode()`](https://python-all.ru/3.8/library/stdtypes.html#str.encode).103- Если это *целое число*, массив будет иметь указанный размер и будет инициализирован нулевыми байтами.104- Если это объект, соответствующий [буферному интерфейсу](https://python-all.ru/3.8/c-api/buffer.html#bufferobjects), для инициализации массива байтов будет использоваться буфер только для чтения этого объекта.105- Если это *итерируемый объект*, он должен быть итерируемым объектом, содержащим целые числа в диапазоне `0 <= x < 256`, которые используются в качестве начального содержимого массива.106107Без аргументов создаётся массив размера 0.108109См. также [Типы бинарных последовательностей – bytes, bytearray, memoryview](https://python-all.ru/3.8/library/stdtypes.html#binaryseq) и [Объекты bytearray](https://python-all.ru/3.8/library/stdtypes.html#typebytearray).110111#### `class bytes([source[, encoding[, errors]]])`112113Возвращает новый объект «bytes», который является неизменяемой последовательностью целых чисел в диапазоне `0 <= x < 256`. [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes) – это неизменяемая версия [`bytearray`](https://python-all.ru/3.8/library/stdtypes.html#bytearray) – он имеет те же неизменяющие методы и то же поведение при индексации и срезах.114115Соответственно, аргументы конструктора интерпретируются так же, как для [`bytearray()`](https://python-all.ru/3.8/library/stdtypes.html#bytearray).116117Объекты bytes также можно создавать с помощью литералов, см. [Литералы строк и bytes](https://python-all.ru/3.8/reference/lexical_analysis.html#strings).118119См. также [Типы бинарных последовательностей – bytes, bytearray, memoryview](https://python-all.ru/3.8/library/stdtypes.html#binaryseq), [Объекты bytes](https://python-all.ru/3.8/library/stdtypes.html#typebytes) и [Операции с байтами и bytearray](https://python-all.ru/3.8/library/stdtypes.html#bytes-methods).120121#### `callable(object)`122123Возвращает [`True`](https://python-all.ru/3.8/library/constants.html#True), если аргумент *object* является вызываемым, и [`False`](https://python-all.ru/3.8/library/constants.html#False) в противном случае. Если эта функция возвращает `True`, вызов всё ещё может завершиться ошибкой, но если возвращается `False`, вызвать *object* никогда не удастся. Обратите внимание, что классы вызываемы (вызов класса возвращает новый экземпляр); экземпляры вызываемы, если их класс имеет метод [`__call__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__call__).124125Новое в версии 3.2: Эта функция была сначала удалена в Python 3.0, а затем снова добавлена в Python 3.2.126127#### `chr(i)`128129Возвращает строку, представляющую символ, кодовая точка Unicode которого равна целому числу *i*. Например, `chr(97)` возвращает строку `'a'`, а `chr(8364)` возвращает `'€'`. Это обратная операция к [`ord()`](https://python-all.ru/3.8/library/functions.html#ord).130131Допустимый диапазон аргумента – от 0 до 1 114 111 (0x10FFFF в шестнадцатеричной системе). [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError) будет возбуждено, если *i* выходит за этот диапазон.132133#### `@classmethod`134135Преобразует метод в метод класса.136137Метод класса получает класс в качестве неявного первого аргумента, точно так же, как метод экземпляра получает экземпляр. Чтобы объявить метод класса, используйте эту идиому:138139```python140class C:141 @classmethod142 def f(cls, arg1, arg2, ...): ...143```144145Форма `@classmethod` является функцией [декоратора](https://python-all.ru/3.8/glossary.html#term-decorator) – подробнее см. в [Function definitions](https://python-all.ru/3.8/reference/compound_stmts.html#function).146147Метод класса можно вызывать как через класс (например, `C.f()`), так и через экземпляр (например, `C().f()`). Экземпляр при этом игнорируется, учитывается только его класс. Если метод класса вызывается для производного класса, в качестве подразумеваемого первого аргумента передаётся объект производного класса.148149Методы класса отличаются от статических методов C++ или Java. Если нужны именно они, см. [`staticmethod()`](https://python-all.ru/3.8/library/functions.html#staticmethod).150151Для получения дополнительной информации о методах класса см. [Стандартная иерархия типов](https://python-all.ru/3.8/reference/datamodel.html#types).152153#### `compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)`154155Компилирует *source* в объект кода или AST. Объекты кода могут выполняться с помощью [`exec()`](https://python-all.ru/3.8/library/functions.html#exec) или [`eval()`](https://python-all.ru/3.8/library/functions.html#eval). *source* может быть обычной строкой, строкой байтов или объектом AST. Обратитесь к документации модуля [`ast`](https://python-all.ru/3.8/library/ast.html#module-ast) за информацией о работе с объектами AST.156157Аргумент *filename* должен указывать файл, из которого был прочитан код; если код был прочитан не из файла, следует передать какое-либо узнаваемое значение (обычно используется `'<string>'`).158159Аргумент *mode* определяет, какой код следует компилировать; он может быть равен `'exec'`, если *source* состоит из последовательности инструкций, `'eval'`, если из одного выражения, или `'single'`, если из одной интерактивной инструкции (в последнем случае будут выведены выражения, которые вычисляются в значение, отличное от `None`).160161Необязательные аргументы *flags* и *dont\_inherit* определяют, какие [операторы future](https://python-all.ru/3.8/reference/simple_stmts.html#future) влияют на компиляцию *source*. Если ни один из них не указан (или оба равны нулю), код компилируется с теми операторами future, которые действуют в коде, вызывающем [`compile()`](https://python-all.ru/3.8/library/functions.html#compile). Если аргумент *flags* задан, а *dont\_inherit* не задан (или равен нулю), то операторы future, указанные аргументом *flags*, используются в дополнение к тем, которые использовались бы в любом случае. Если *dont\_inherit* – ненулевое целое число, то аргумент *flags* является единственным – операторы future, действующие вокруг вызова compile, игнорируются.162163Операторы future задаются битами, которые можно объединять побитовым ИЛИ для указания нескольких операторов. Битовое поле, необходимое для указания конкретной возможности, можно найти как атрибут `compiler_flag` в экземпляре `_Feature` в модуле [`__future__`](https://python-all.ru/3.8/library/__future__.html#module-__future__).164165Необязательный аргумент *flags* также определяет, разрешено ли компилируемому исходному коду содержать верхнеуровневые `await`, `async for` и `async with`. Когда установлен бит `ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`, возвращаемый объект кода имеет `CO_COROUTINE`, установленный в `co_code`, и может быть выполнен в интерактивном режиме с помощью `await eval(code_object)`.166167Аргумент *optimize* задаёт уровень оптимизации компилятора; значение по умолчанию `-1` выбирает уровень оптимизации интерпретатора, заданный опциями [`-O`](https://python-all.ru/3.8/using/cmdline.html#cmdoption-o). Явные уровни: `0` (без оптимизации; `__debug__` истинно), `1` (утверждения удалены, `__debug__` ложно) или `2` (строки документации также удалены).168169Эта функция возбуждает [`SyntaxError`](https://python-all.ru/3.8/library/exceptions.html#SyntaxError), если скомпилированный исходный код некорректен, и [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError), если исходный код содержит нулевые байты.170171Если требуется разобрать код Python в его AST-представление, см. [`ast.parse()`](https://python-all.ru/3.8/library/ast.html#ast.parse).172173Возбуждает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `compile` с аргументами `source` и `filename`. Это событие также может быть возбуждено при неявной компиляции.174175> **Примечание**176>177> При компиляции строки с многострочным кодом в режиме `'single'` или `'eval'` входные данные должны завершаться как минимум одним символом новой строки. Это необходимо для облегчения определения незавершённых и завершённых инструкций в модуле [`code`](https://python-all.ru/3.8/library/code.html#module-code).178179> **Предупреждение**180>181> Можно привести к аварийному завершению интерпретатора Python с помощью достаточно длинной/сложной строки при компиляции в объект AST из-за ограничений глубины стека в компиляторе AST Python.182183Изменено в версии 3.2: Разрешено использование символов новой строки Windows и Mac. Также ввод в режиме `'exec'` больше не должен заканчиваться символом новой строки. Добавлен параметр *optimize*.184185Изменено в версии 3.5: Ранее возбуждалось исключение [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError), когда в *source* встречались нулевые байты.186187Новое в версии 3.8: Теперь `ast.PyCF_ALLOW_TOP_LEVEL_AWAIT` может передаваться в flags для включения поддержки `await`, `async for` и `async with` верхнего уровня.188189#### `class complex([real[, imag]])`190191Возвращает комплексное число со значением *real* + *imag*\*1j или преобразует строку или число в комплексное число. Если первый параметр – строка, она интерпретируется как комплексное число, и функция должна вызываться без второго параметра. Второй параметр не может быть строкой. Каждый аргумент может иметь любой числовой тип (включая комплексный). Если *imag* опущен, по умолчанию он равен нулю, и конструктор работает как числовое преобразование, аналогично [`int`](https://python-all.ru/3.8/library/functions.html#int) и [`float`](https://python-all.ru/3.8/library/functions.html#float). Если оба аргумента опущены, возвращается `0j`.192193Для обычного объекта Python `x` метод `complex(x)` делегирует вызов `x.__complex__()`. Если `__complex__()` не определён, то используется [`__float__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__float__). Если `__float__()` не определён, то используется [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__).194195> **Примечание**196>197> При преобразовании из строки вокруг центрального оператора `+` или `-` не должно быть пробелов. Например, `complex('1+2j')` корректно, а `complex('1 + 2j')` вызывает [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError).198199Тип complex описан в разделе [Числовые типы – int, float, complex](https://python-all.ru/3.8/library/stdtypes.html#typesnumeric).200201Изменено в версии 3.6: Разрешена группировка цифр с помощью подчёркиваний, как в литералах кода.202203Изменено в версии 3.8: Используется [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), если [`__complex__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__complex__) и [`__float__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__float__) не определены.204205#### `delattr(object, name)`206207Это родственная функция для [`setattr()`](https://python-all.ru/3.8/library/functions.html#setattr). Аргументами являются объект и строка. Строка должна быть именем одного из атрибутов объекта. Функция удаляет указанный атрибут, если объект это позволяет. Например, `delattr(x, 'foobar')` эквивалентно `del x.foobar`.208209#### `class dict(**kwarg)`210211#### `class dict(mapping, **kwarg)`212213#### `class dict(iterable, **kwarg)`214215Создаёт новый словарь. Объект [`dict`](https://python-all.ru/3.8/library/stdtypes.html#dict) – это класс словаря. Документацию по этому классу см. в [`dict`](https://python-all.ru/3.8/library/stdtypes.html#dict) и [Типы отображений – dict](https://python-all.ru/3.8/library/stdtypes.html#typesmapping).216217О других контейнерах см. встроенные классы [`list`](https://python-all.ru/3.8/library/stdtypes.html#list), [`set`](https://python-all.ru/3.8/library/stdtypes.html#set) и [`tuple`](https://python-all.ru/3.8/library/stdtypes.html#tuple), а также модуль [`collections`](https://python-all.ru/3.8/library/collections.html#module-collections).218219#### `dir([object])`220221Без аргументов возвращает список имён в текущей локальной области видимости. Если передан аргумент, пытается вернуть список допустимых атрибутов этого объекта.222223Если у объекта есть метод с именем [`__dir__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__dir__), этот метод будет вызван и должен вернуть список атрибутов. Это позволяет объектам, реализующим собственную функцию [`__getattr__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattr__) или [`__getattribute__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattribute__), настраивать способ, которым [`dir()`](https://python-all.ru/3.8/library/functions.html#dir) сообщает их атрибуты.224225Если объект не предоставляет [`__dir__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__dir__), функция старается собрать информацию из атрибута [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__) объекта, если он определён, и из объекта его типа. Полученный список не обязательно полный и может быть неточным, если объект имеет пользовательский [`__getattr__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattr__).226227Механизм [`dir()`](https://python-all.ru/3.8/library/functions.html#dir) по умолчанию ведёт себя по-разному для разных типов объектов, поскольку он пытается выдать наиболее релевантную, а не полную информацию:228229- Если объект является модулем, список содержит имена атрибутов этого модуля.230- Если объект является типом или классом, список содержит имена его атрибутов, а также (рекурсивно) атрибутов его базовых классов.231- В остальных случаях список содержит имена атрибутов объекта, имена атрибутов его класса и (рекурсивно) атрибутов базовых классов его класса.232233Полученный список сортируется по алфавиту. Например:234235```python236>>> import struct237>>> dir() # показать имена в пространстве имён модуля 238['__builtins__', '__name__', 'struct']239>>> dir(struct) # показать имена в модуле struct 240['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',241 '__initializing__', '__loader__', '__name__', '__package__',242 '_clearcache', 'calcsize', 'error', 'pack', 'pack_into',243 'unpack', 'unpack_from']244>>> class Shape:245... def __dir__(self):246... return ['area', 'perimeter', 'location']247>>> s = Shape()248>>> dir(s)249['area', 'location', 'perimeter']250```251252> **Примечание**253>254> Поскольку [`dir()`](https://python-all.ru/3.8/library/functions.html#dir) предоставляется в первую очередь для удобства использования в интерактивной оболочке, он старается выдать интересный набор имён скорее, чем строго или последовательно определённый, и его детальное поведение может меняться от версии к версии. Например, атрибуты метакласса не входят в результирующий список, когда аргументом является класс.255256#### `divmod(a, b)`257258Принимает два (не комплексных) числа в качестве аргументов и возвращает пару чисел, состоящую из их частного и остатка при целочисленном делении. Для смешанных типов операндов применяются правила бинарных арифметических операторов. Для целых чисел результат такой же, как `(a // b, a % b)`. Для чисел с плавающей запятой результат равен `(q, a % b)`, где *q* обычно равно `math.floor(a / b)`, но может быть на 1 меньше. В любом случае `q * b + a % b` очень близко к *a*; если `a % b` не равно нулю, оно имеет тот же знак, что и *b*, и `0 <= abs(a % b) < abs(b)`.259260#### `enumerate(iterable, start=0)`261262Возвращает объект enumerate. *iterable* должен быть последовательностью, [итератором](https://python-all.ru/3.8/glossary.html#term-iterator) или другим объектом, поддерживающим итерацию. Метод [`__next__()`](https://python-all.ru/3.8/library/stdtypes.html#iterator.__next__) итератора, возвращаемого[`enumerate()`](https://python-all.ru/3.8/library/functions.html#enumerate), возвращает кортеж, содержащий счётчик (начиная с *start*, который по умолчанию равен 0) и значения, полученные при итерации по *iterable*.263264```python265>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']266>>> list(enumerate(seasons))267[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]268>>> list(enumerate(seasons, start=1))269[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]270```271272Эквивалентно следующему:273274```python275def enumerate(sequence, start=0):276 n = start277 for elem in sequence:278 yield n, elem279 n += 1280```281282#### `eval(expression[, globals[, locals]])`283284Аргументами являются строка и необязательные globals и locals. Если они указаны, *globals* должен быть словарём. Если указаны, *locals* может быть любым отображением (mapping).285286Аргумент *expression* разбирается и вычисляется как выражение Python (технически говоря, список условий) с использованием словарей *globals* и *locals* в качестве глобального и локального пространства имён. Если словарь *globals* присутствует и не содержит значения для ключа `__builtins__`, то под этим ключом перед разбором *expression* вставляется ссылка на словарь встроенного модуля [`builtins`](https://python-all.ru/3.8/library/builtins.html#module-builtins). Это означает, что *expression* обычно имеет полный доступ к стандартному модулю [`builtins`](https://python-all.ru/3.8/library/builtins.html#module-builtins), а ограниченные окружения распространяются. Если словарь *locals* опущен, он по умолчанию равен словарю *globals*. Если оба словаря опущены, выражение выполняется с *globals* и *locals* из окружения, где вызвана [`eval()`](https://python-all.ru/3.8/library/functions.html#eval). Обратите внимание, *eval()* не имеет доступа к [вложенным областям видимости](https://python-all.ru/3.8/glossary.html#term-nested-scope) (non-locals) в окружающем окружении.287288Возвращаемое значение – результат вычисленного выражения. Синтаксические ошибки сообщаются как исключения. Пример:289290```python291>>> x = 1292>>> eval('x+1')2932294```295296Эту функцию также можно использовать для выполнения произвольных объектов кода (например, созданных с помощью [`compile()`](https://python-all.ru/3.8/library/functions.html#compile)). В этом случае вместо строки передаётся объект кода. Если объект кода был скомпилирован с `'exec'` в качестве аргумента *mode*, то возвращаемое значение [`eval()`](https://python-all.ru/3.8/library/functions.html#eval) будет `None`.297298Подсказки: динамическое выполнение инструкций поддерживается функцией [`exec()`](https://python-all.ru/3.8/library/functions.html#exec). Функции [`globals()`](https://python-all.ru/3.8/library/functions.html#globals) и [`locals()`](https://python-all.ru/3.8/library/functions.html#locals) возвращают текущий глобальный и локальный словари соответственно, что может быть полезно для передачи в [`eval()`](https://python-all.ru/3.8/library/functions.html#eval) или [`exec()`](https://python-all.ru/3.8/library/functions.html#exec).299300См. [`ast.literal_eval()`](https://python-all.ru/3.8/library/ast.html#ast.literal_eval): функция, которая может безопасно вычислять строки с выражениями, содержащими только литералы.301302Вызывает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `exec` с объектом кода в качестве аргумента. Также могут возникать события компиляции кода.303304#### `exec(object[, globals[, locals]])`305306Эта функция поддерживает динамическое выполнение кода Python. *object* должен быть строкой или объектом кода. Если это строка, она разбирается как набор операторов Python, которые затем выполняются (если не возникает синтаксическая ошибка). [1](https://python-all.ru/3.8/library/functions.html#id2) Если это объект кода, он просто выполняется. Во всех случаях выполняемый код должен быть допустимым как файловый ввод (см. раздел «Файловый ввод» в Справочном руководстве). Имейте в виду, что операторы [`nonlocal`](https://python-all.ru/3.8/reference/simple_stmts.html#nonlocal), [`yield`](https://python-all.ru/3.8/reference/simple_stmts.html#yield) и [`return`](https://python-all.ru/3.8/reference/simple_stmts.html#return) не могут использоваться вне определений функций, даже в контексте кода, переданного функции [`exec()`](https://python-all.ru/3.8/library/functions.html#exec). Возвращаемое значение – `None`.307308Во всех случаях, если необязательные части опущены, код выполняется в текущей области видимости. Если указан только *globals*, он должен быть словарём (и не подклассом словаря), который будет использоваться как для глобальных, так и для локальных переменных. Если указаны *globals* и *locals*, они используются для глобальных и локальных переменных соответственно. Если указан, *locals* может быть любым отображающим объектом (mapping object). Помните, что на уровне модуля globals и locals – это один и тот же словарь. Если exec получает два отдельных объекта в качестве *globals* и *locals*, код будет выполняться так, как если бы он был встроен в определение класса.309310Если словарь *globals* не содержит значение для ключа `__builtins__`, под этот ключ вставляется ссылка на словарь встроенного модуля [`builtins`](https://python-all.ru/3.8/library/builtins.html#module-builtins). Таким образом можно контролировать, какие встроенные объекты доступны выполняемому коду, вставив собственный словарь `__builtins__` в *globals* перед передачей его в [`exec()`](https://python-all.ru/3.8/library/functions.html#exec).311312Вызывает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `exec` с объектом кода в качестве аргумента. Также могут возникать события компиляции кода.313314> **Примечание**315>316> Встроенные функции [`globals()`](https://python-all.ru/3.8/library/functions.html#globals) и [`locals()`](https://python-all.ru/3.8/library/functions.html#locals) возвращают текущий глобальный и локальный словарь соответственно, что может быть полезно для передачи в качестве второго и третьего аргумента в [`exec()`](https://python-all.ru/3.8/library/functions.html#exec).317318> **Примечание**319>320> Словарь *locals* по умолчанию действует так, как описано для функции [`locals()`](https://python-all.ru/3.8/library/functions.html#locals) ниже: не следует пытаться изменять словарь *locals* по умолчанию. Передайте явный словарь *locals*, если нужно увидеть влияние кода на *locals* после возврата из функции [`exec()`](https://python-all.ru/3.8/library/functions.html#exec).321322#### `filter(function, iterable)`323324Создает итератор из тех элементов *итерируемого объекта*, для которых *функция* возвращает истину. *Итерируемый объект* может быть последовательностью, контейнером, поддерживающим итерацию, или итератором. Если *функция* равна `None`, подразумевается тождественная функция, то есть удаляются все элементы *итерируемого объекта*, которые являются ложными.325326Обратите внимание: `filter(function, iterable)` эквивалентно генераторному выражению `(item for item in iterable if function(item))`, если function не равна `None`, и `(item for item in iterable if item)`, если function равна `None`.327328См. [`itertools.filterfalse()`](https://python-all.ru/3.8/library/itertools.html#itertools.filterfalse) для дополнительной функции, которая возвращает элементы *итерируемого объекта*, для которых *функция* возвращает ложь.329330#### `class float([x])`331332Возвращает число с плавающей запятой, построенное из числа или строки *x*.333334Если аргумент является строкой, она должна содержать десятичное число, которое может предваряться знаком и может быть окружено пробелами. Необязательный знак может быть `'+'` или `'-'`; знак `'+'` не влияет на результирующее значение. Аргумент также может быть строкой, представляющей NaN (не число), или положительную или отрицательную бесконечность. Более точно, входная строка должна соответствовать следующей грамматике после удаления начальных и конечных пробельных символов:335336```337338sign ::= "+" | "-"339infinity ::= "Infinity" | "inf"340nan ::= "nan"341numeric_value ::= floatnumber | infinity | nan342numeric_string ::= [sign] numeric_value343```344345Здесь `floatnumber` – это форма литерала с плавающей точкой Python, описанная в [Литералы с плавающей точкой](https://python-all.ru/3.8/reference/lexical_analysis.html#floating). Регистр не имеет значения, так что, например, «inf», «Inf», «INFINITY» и «iNfINity» – все допустимые варианты написания положительной бесконечности.346347В противном случае, если аргумент – целое число или число с плавающей запятой, возвращается число с плавающей запятой с тем же значением (в пределах точности чисел с плавающей запятой Python). Если аргумент выходит за диапазон числа float в Python, будет возбуждено исключение [`OverflowError`](https://python-all.ru/3.8/library/exceptions.html#OverflowError).348349Для произвольного объекта Python `x` функция `float(x)` делегирует выполнение `x.__float__()`. Если `__float__()` не определён, используется [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__).350351Если аргумент не указан, возвращается `0.0`.352353Примеры:354355```python356>>> float('+1.23')3571.23358>>> float(' -12345\n')359-12345.0360>>> float('1e-003')3610.001362>>> float('+1E6')3631000000.0364>>> float('-Infinity')365-inf366```367368Тип float описан в разделе [Числовые типы – int, float, complex](https://python-all.ru/3.8/library/stdtypes.html#typesnumeric).369370Изменено в версии 3.6: Разрешена группировка цифр с помощью подчёркиваний, как в литералах кода.371372Изменено в версии 3.7: *x* теперь является параметром только для позиционной передачи.373374Изменено в версии 3.8: Использует [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), если [`__float__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__float__) не определён.375376#### `format(value[, format_spec])`377378Преобразует *значение* в «форматированное» представление, управляемое *спецификацией формата*. Интерпретация *спецификации формата* зависит от типа аргумента *значение*, однако существует стандартный синтаксис форматирования, используемый большинством встроенных типов: [Мини-язык спецификации формата](https://python-all.ru/3.8/library/string.html#formatspec).379380Значение *format\_spec* по умолчанию – пустая строка, что обычно даёт тот же эффект, что и вызов [`str(value)`](https://python-all.ru/3.8/library/stdtypes.html#str).381382Вызов `format(value, format_spec)` преобразуется в `type(value).__format__(value, format_spec)`, который обходит словарь экземпляра при поиске метода [`__format__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__format__) значения. Исключение [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError) возникает, если поиск метода доходит до [`object`](https://python-all.ru/3.8/library/functions.html#object) и *format\_spec* не пуста, или если *format\_spec* или возвращаемое значение не являются строками.383384Изменено в версии 3.4: `object().__format__(format_spec)` вызывает [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError), если *format\_spec* не является пустой строкой.385386#### `class frozenset([iterable])`387388Возвращает новый объект [`frozenset`](https://python-all.ru/3.8/library/stdtypes.html#frozenset), опционально с элементами, взятыми из *итерируемого объекта*. `frozenset` – это встроенный класс. См. [`frozenset`](https://python-all.ru/3.8/library/stdtypes.html#frozenset) и [Типы множеств – set, frozenset](https://python-all.ru/3.8/library/stdtypes.html#types-set) для документации об этом классе.389390Для других контейнеров см. встроенные классы [`set`](https://python-all.ru/3.8/library/stdtypes.html#set), [`list`](https://python-all.ru/3.8/library/stdtypes.html#list), [`tuple`](https://python-all.ru/3.8/library/stdtypes.html#tuple) и [`dict`](https://python-all.ru/3.8/library/stdtypes.html#dict), а также модуль [`collections`](https://python-all.ru/3.8/library/collections.html#module-collections).391392#### `getattr(object, name[, default])`393394Возвращает значение именованного атрибута объекта *object*. *name* должен быть строкой. Если эта строка является именем одного из атрибутов объекта, результатом будет значение этого атрибута. Например, `getattr(x, 'foobar')` эквивалентно `x.foobar`. Если именованный атрибут не существует, возвращается *значение по умолчанию*, если оно предоставлено, в противном случае возбуждается [`AttributeError`](https://python-all.ru/3.8/library/exceptions.html#AttributeError).395396#### `globals()`397398Возвращает словарь, представляющий текущую таблицу глобальных символов. Это всегда словарь текущего модуля (внутри функции или метода это модуль, где она определена, а не модуль, из которого она вызывается).399400#### `hasattr(object, name)`401402Аргументами являются объект и строка. Результат равен `True`, если строка является именем одного из атрибутов объекта, и `False` в противном случае. (Реализовано вызовом `getattr(object, name)` и проверкой, вызывает ли он исключение [`AttributeError`](https://python-all.ru/3.8/library/exceptions.html#AttributeError) или нет.)403404#### `hash(object)`405406Возвращает хеш-значение объекта (если оно есть). Хеш-значения – целые числа. Они используются для быстрого сравнения ключей словаря при поиске. Числовые значения, равные при сравнении, имеют одинаковое хеш-значение (даже если они разных типов, как в случае 1 и 1.0).407408> **Примечание**409>410> Для объектов с пользовательскими методами [`__hash__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__hash__), обратите внимание, что [`hash()`](https://python-all.ru/3.8/library/functions.html#hash) усекает возвращаемое значение на основе разрядности хост-машины. См. [`__hash__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__hash__) для подробностей.411412#### `help([object])`413414Запускает встроенную справочную систему. (Эта функция предназначена для интерактивного использования.) Если аргумент не указан, интерактивная справочная система запускается на консоли интерпретатора. Если аргумент – строка, то она ищется как имя модуля, функции, класса, метода, ключевого слова или темы документации, и на консоль выводится страница справки. Если аргумент – объект любого другого типа, генерируется страница справки по этому объекту.415416Обратите внимание: если в списке параметров функции встречается косая черта (/), то при вызове [`help()`](https://python-all.ru/3.8/library/functions.html#help) это означает, что параметры до косой черты являются только позиционными. Подробнее см. [статью в FAQ о только позиционных параметрах](https://python-all.ru/3.8/faq/programming.html#faq-positional-only-arguments).417418Эта функция добавляется во встроенное пространство имен модулем [`site`](https://python-all.ru/3.8/library/site.html#module-site).419420Изменено в версии 3.4: Изменения в [`pydoc`](https://python-all.ru/3.8/library/pydoc.html#module-pydoc) и [`inspect`](https://python-all.ru/3.8/library/inspect.html#module-inspect) привели к тому, что сообщаемые сигнатуры для вызываемых объектов стали более полными и согласованными.421422#### `hex(x)`423424Преобразует целое число в шестнадцатеричную строку в нижнем регистре с префиксом «0x». Если *x* не является объектом Python [`int`](https://python-all.ru/3.8/library/functions.html#int), он должен определять метод [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), который возвращает целое число. Некоторые примеры:425426```python427>>> hex(255)428'0xff'429>>> hex(-42)430'-0x2a'431```432433Если вы хотите преобразовать целое число в шестнадцатеричную строку в верхнем или нижнем регистре, с префиксом или без, можно использовать любой из следующих способов:434435```python436>>> '%#x' % 255, '%x' % 255, '%X' % 255437('0xff', 'ff', 'FF')438>>> format(255, '#x'), format(255, 'x'), format(255, 'X')439('0xff', 'ff', 'FF')440>>> f'{255:#x}', f'{255:x}', f'{255:X}'441('0xff', 'ff', 'FF')442```443444См. также [`format()`](https://python-all.ru/3.8/library/functions.html#format) для получения дополнительной информации.445446См. также [`int()`](https://python-all.ru/3.8/library/functions.html#int) для преобразования шестнадцатеричной строки в целое число с основанием 16.447448> **Примечание**449>450> Чтобы получить шестнадцатеричное строковое представление числа с плавающей точкой, используйте метод [`float.hex()`](https://python-all.ru/3.8/library/stdtypes.html#float.hex).451452#### `id(object)`453454Возвращает «идентификатор» объекта. Это целое число, которое гарантированно будет уникальным и постоянным для данного объекта на протяжении его времени жизни. Два объекта с непересекающимся временем жизни могут иметь одинаковое значение [`id()`](https://python-all.ru/3.8/library/functions.html#id).455456**Особенность реализации CPython:** Это адрес объекта в памяти.457458Вызывает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `builtins.id` с аргументом `id`.459460#### `input([prompt])`461462Если аргумент *prompt* присутствует, он выводится в стандартный вывод без символа новой строки. Затем функция читает строку из ввода, преобразует её в строку (удаляя конечный символ новой строки) и возвращает её. Когда достигнут конец файла, возбуждается [`EOFError`](https://python-all.ru/3.8/library/exceptions.html#EOFError). Пример:463464```python465>>> s = input('--> ') 466--> Monty Python's Flying Circus467>>> s 468"Monty Python's Flying Circus"469```470471Если модуль [`readline`](https://python-all.ru/3.8/library/readline.html#module-readline) был загружен, то [`input()`](https://python-all.ru/3.8/library/functions.html#input) будет использовать его для предоставления расширенных возможностей редактирования строки и истории команд.472473Возбуждает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `builtins.input` с аргументом `prompt` перед чтением ввода474475Возбуждает событие аудита `builtins.input/result` с результатом после успешного чтения ввода.476477#### `class int([x])`478479#### `class int(x, base=10)`480481Возвращает целочисленный объект, созданный из числа или строки *x*, или возвращает `0`, если аргументы не переданы. Если *x* определяет [`__int__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__int__), `int(x)` возвращает `x.__int__()`. Если *x* определяет [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), возвращается `x.__index__()`. Если *x* определяет [`__trunc__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__trunc__), возвращается `x.__trunc__()`. Для чисел с плавающей точкой происходит усечение в сторону нуля.482483Если *x* не является числом или если задан *base*, то *x* должен быть строкой, [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes) или экземпляром [`bytearray`](https://python-all.ru/3.8/library/stdtypes.html#bytearray), представляющим [целочисленный литерал](https://python-all.ru/3.8/reference/lexical_analysis.html#integers) в системе счисления *base*. При необходимости литерал может предваряться `+` или `-` (без пробела) и быть окружен пробелами. Литерал в системе счисления n состоит из цифр от 0 до n-1, где `a` до `z` (или `A` до `Z`) имеют значения от 10 до 35. Значение по умолчанию *base* равно 10. Допустимые значения: 0 и 2–36. Литералы с основанием 2, 8 и 16 могут опционально начинаться с `0b`/`0B`, `0o`/`0O` или `0x`/`0X`, как и целочисленные литералы в коде. Основание 0 означает точную интерпретацию как литерала в коде, так что фактическое основание может быть 2, 8, 10 или 16, и поэтому `int('010', 0)` недопустимо, тогда как `int('010')` допустимо, равно как и `int('010', 8)`.484485Целочисленный тип описан в разделе [Числовые типы – int, float, complex](https://python-all.ru/3.8/library/stdtypes.html#typesnumeric).486487Изменено в версии 3.4: Если *base* не является экземпляром [`int`](https://python-all.ru/3.8/library/functions.html#int) и объект *base* имеет метод [`base.__index__`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), то вызывается этот метод для получения целого числа для основания. В предыдущих версиях использовался [`base.__int__`](https://python-all.ru/3.8/reference/datamodel.html#object.__int__) вместо [`base.__index__`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__).488489Изменено в версии 3.6: Разрешена группировка цифр с помощью подчёркиваний, как в литералах кода.490491Изменено в версии 3.7: *x* теперь является параметром только для позиционной передачи.492493Изменено в версии 3.8: Использует [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), если [`__int__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__int__) не определён.494495Изменено в версии 3.8.14: [`int`](https://python-all.ru/3.8/library/functions.html#int) строковые входные данные и строковые представления могут быть ограничены для предотвращения атак типа «отказ в обслуживании». Исключение [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError) возбуждается, когда при преобразовании строки *x* в [`int`](https://python-all.ru/3.8/library/functions.html#int) или при преобразовании [`int`](https://python-all.ru/3.8/library/functions.html#int) в строку превышается лимит. См. документацию [integer string conversion length limitation](https://python-all.ru/3.8/library/stdtypes.html#int-max-str-digits).496497#### `isinstance(object, classinfo)`498499Возвращает `True`, если аргумент *object* является экземпляром аргумента *classinfo*, или его (прямого, косвенного или [виртуального](https://python-all.ru/3.8/glossary.html#term-abstract-base-class)) подкласса. Если *object* не является объектом указанного типа, функция всегда возвращает `False`. Если *classinfo* является кортежем объектов-типов (или рекурсивно других таких кортежей), возвращает `True`, если *object* является экземпляром любого из типов. Если *classinfo* не является типом, кортежем типов или таких кортежей, возбуждается исключение [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError).500501#### `issubclass(class, classinfo)`502503Возвращает `True`, если *class* является подклассом (прямым, косвенным или [виртуальным](https://python-all.ru/3.8/glossary.html#term-abstract-base-class)) *classinfo*. Класс считается своим собственным подклассом. *classinfo* может быть кортежем объектов классов, в этом случае проверяется каждая запись в *classinfo*. В любом другом случае возбуждается исключение [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError).504505#### `iter(object[, sentinel])`506507Возвращает объект [итератор](https://python-all.ru/3.8/glossary.html#term-iterator). Первый аргумент интерпретируется совершенно по-разному в зависимости от наличия второго аргумента. Без второго аргумента *object* должен быть объектом коллекции, поддерживающим протокол итерации (метод [`__iter__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__iter__)) или протокол последовательности (метод [`__getitem__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getitem__) с целочисленными аргументами, начиная с `0`). Если он не поддерживает ни один из этих протоколов, возбуждается [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError). Если задан второй аргумент, *страж*, то *object* должен быть вызываемым объектом. Созданный в этом случае итератор будет вызывать *object* без аргументов при каждом вызове своего метода [`__next__()`](https://python-all.ru/3.8/library/stdtypes.html#iterator.__next__); если возвращённое значение равно *страж*, возбуждается [`StopIteration`](https://python-all.ru/3.8/library/exceptions.html#StopIteration), в противном случае значение возвращается.508509См. также [Типы итераторов](https://python-all.ru/3.8/library/stdtypes.html#typeiter).510511Одно из полезных применений второй формы [`iter()`](https://python-all.ru/3.8/library/functions.html#iter) – создание построчного (блочного) читателя. Например, чтение блоков фиксированной ширины из двоичного файла базы данных до достижения конца файла:512513```python514from functools import partial515with open('mydata.db', 'rb') as f:516 for block in iter(partial(f.read, 64), b''):517 process_block(block)518```519520#### `len(s)`521522Возвращает длину (количество элементов) объекта. Аргументом может быть последовательность (например, строка, байты, кортеж, список или диапазон) или коллекция (например, словарь, множество или замороженное множество).523524#### `class list([iterable])`525526Вместо того чтобы быть функцией, [`list`](https://python-all.ru/3.8/library/stdtypes.html#list) на самом деле является изменяемым типом последовательности, как описано в [Списки](https://python-all.ru/3.8/library/stdtypes.html#typesseq-list) и [Типы последовательностей – list, tuple, range](https://python-all.ru/3.8/library/stdtypes.html#typesseq).527528#### `locals()`529530Обновляет и возвращает словарь, представляющий текущую таблицу локальных символов. Свободные переменные возвращаются [`locals()`](https://python-all.ru/3.8/library/functions.html#locals) при вызове в блоках функций, но не в блоках классов. Обратите внимание, что на уровне модуля [`locals()`](https://python-all.ru/3.8/library/functions.html#locals) и [`globals()`](https://python-all.ru/3.8/library/functions.html#globals) являются одним и тем же словарём.531532> **Примечание**533>534> Содержимое этого словаря не следует изменять; изменения могут не повлиять на значения локальных и свободных переменных, используемых интерпретатором.535536#### `map(function, iterable, ...)`537538Возвращает итератор, который применяет *function* к каждому элементу *iterable* и возвращает результаты. Если переданы дополнительные аргументы *iterable*, *function* должна принимать столько же аргументов и применяется к элементам из всех итерируемых параллельно. При нескольких итерируемых итератор останавливается, когда завершается самый короткий. Для случаев, когда входные данные функции уже упакованы в кортежи аргументов, см. [`itertools.starmap()`](https://python-all.ru/3.8/library/itertools.html#itertools.starmap).539540#### `max(iterable, *[, key, default])`541542#### `max(arg1, arg2, *args[, key])`543544Возвращает наибольший элемент итерируемого объекта или наибольший из двух или более аргументов.545546Если указан один позиционный аргумент, он должен быть [итерируемым объектом](https://python-all.ru/3.8/glossary.html#term-iterable). Возвращается наибольший элемент итерируемого объекта. Если указано два или более позиционных аргумента, возвращается наибольший из них.547548Есть два необязательных аргумента, передаваемых только по ключу. Аргумент *key* задаёт функцию упорядочения с одним аргументом, подобно тому, как это делается для [`list.sort()`](https://python-all.ru/3.8/library/stdtypes.html#list.sort). Аргумент *default* задаёт объект, возвращаемый, если переданный итерируемый объект пуст. Если итерация пуста и *default* не указан, возбуждается [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError).549550Если несколько элементов являются максимальными, функция возвращает первый встреченный. Это согласуется с другими инструментами, сохраняющими стабильность сортировки, такими как `sorted(iterable, key=keyfunc, reverse=True)[0]` и `heapq.nlargest(1, iterable, key=keyfunc)`.551552Новое в версии 3.4: Аргумент *default*, указываемый только по ключевому слову.553554Изменено в версии 3.8: Аргумент *key* может быть `None`.555556#### `class memoryview(obj)`557558Возвращает объект «представление памяти» (memory view), созданный из переданного аргумента. Дополнительную информацию см. в [Memory Views](https://python-all.ru/3.8/library/stdtypes.html#typememoryview).559560#### `min(iterable, *[, key, default])`561562#### `min(arg1, arg2, *args[, key])`563564Возвращает наименьший элемент итерируемого объекта или наименьший из двух или более аргументов.565566Если указан один позиционный аргумент, он должен быть [итерируемым объектом](https://python-all.ru/3.8/glossary.html#term-iterable). Возвращается наименьший элемент итерируемого объекта. Если указано два или более позиционных аргумента, возвращается наименьший из них.567568Есть два необязательных аргумента, передаваемых только по ключу. Аргумент *key* задаёт функцию упорядочения с одним аргументом, подобно тому, как это делается для [`list.sort()`](https://python-all.ru/3.8/library/stdtypes.html#list.sort). Аргумент *default* задаёт объект, возвращаемый, если переданный итерируемый объект пуст. Если итерация пуста и *default* не указан, возбуждается [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError).569570Если несколько элементов являются минимальными, функция возвращает первый из них. Это согласуется с другими инструментами, сохраняющими устойчивость сортировки, такими как `sorted(iterable, key=keyfunc)[0]` и `heapq.nsmallest(1, iterable, key=keyfunc)`.571572Новое в версии 3.4: Аргумент *default*, указываемый только по ключевому слову.573574Изменено в версии 3.8: Аргумент *key* может быть `None`.575576#### `next(iterator[, default])`577578Извлекает следующий элемент из *итератора*, вызывая его метод [`__next__()`](https://python-all.ru/3.8/library/stdtypes.html#iterator.__next__). Если указан *default*, он возвращается, когда итератор исчерпан, в противном случае возбуждается [`StopIteration`](https://python-all.ru/3.8/library/exceptions.html#StopIteration).579580#### `class object`581582Возвращает новый пустой объект. [`object`](https://python-all.ru/3.8/library/functions.html#object) – базовый класс для всех классов. Он содержит методы, общие для всех экземпляров классов Python. Эта функция не принимает аргументов.583584> **Примечание**585>586> [`object`](https://python-all.ru/3.8/library/functions.html#object) *не* имеет [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__), поэтому нельзя присваивать произвольные атрибуты экземпляру класса [`object`](https://python-all.ru/3.8/library/functions.html#object).587588#### `oct(x)`589590Преобразует целое число в восьмеричную строку с префиксом «0o». Результат является допустимым выражением Python. Если *x* не является объектом Python [`int`](https://python-all.ru/3.8/library/functions.html#int), он должен определять метод [`__index__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__index__), который возвращает целое число. Например:591592```python593>>> oct(8)594'0o10'595>>> oct(-56)596'-0o70'597```598599Если нужно преобразовать целое число в восьмеричную строку с префиксом «0o» или без него, можно воспользоваться одним из следующих способов.600601```python602>>> '%#o' % 10, '%o' % 10603('0o12', '12')604>>> format(10, '#o'), format(10, 'o')605('0o12', '12')606>>> f'{10:#o}', f'{10:o}'607('0o12', '12')608```609610См. также [`format()`](https://python-all.ru/3.8/library/functions.html#format) для получения дополнительной информации.611612>613614#### `open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)`615616Открывает *file* и возвращает соответствующий [файловый объект](https://python-all.ru/3.8/glossary.html#term-file-object). Если файл не может быть открыт, возбуждается [`OSError`](https://python-all.ru/3.8/library/exceptions.html#OSError). См. [Чтение и запись файлов](https://python-all.ru/3.8/tutorial/inputoutput.html#tut-files) для дополнительных примеров использования этой функции.617618*file* – это [path-like object](https://python-all.ru/3.8/glossary.html#term-path-like-object), задающий путь (абсолютный или относительный текущего рабочего каталога) к открываемому файлу или целочисленный файловый дескриптор оборачиваемого файла. (Если передан файловый дескриптор, он закрывается при закрытии возвращаемого объекта I/O, если только *closefd* не установлен в `False`.)619620*mode* – необязательная строка, задающая режим открытия файла. По умолчанию используется `'r'`, что означает открытие для чтения в текстовом режиме. Другие распространённые значения: `'w'` для записи (с усечением файла, если он уже существует), `'x'` для исключительного создания и `'a'` для дозаписи (что в *некоторых* Unix-системах означает, что *все* операции записи добавляются в конец файла независимо от текущей позиции указателя). В текстовом режиме, если *encoding* не указан, используется кодировка, зависящая от платформы: `locale.getpreferredencoding(False)` вызывается для получения текущей кодировки локали. (Для чтения и записи сырых байтов используйте двоичный режим и оставьте *encoding* неопределённым.) Доступные режимы:621622| Символ | Значение |623| --- | --- |624| `'r'` | открытие для чтения (по умолчанию) |625| `'w'` | открытие для записи, с предварительным усечением файла |626| `'x'` | открытие для эксклюзивного создания, завершается ошибкой, если файл уже существует |627| `'a'` | открытие для записи, дозапись в конец файла, если он существует |628| `'b'` | двоичный режим |629| `'t'` | текстовый режим (по умолчанию) |630| `'+'` | открытие для обновления (чтения и записи) |631632Режим по умолчанию – `'r'` (открытие для чтения текста, синоним `'rt'`). Режимы `'w+'` и `'w+b'` открывают и усекают файл. Режимы `'r+'` и `'r+b'` открывают файл без усечения.633634Как упоминалось в [Обзоре](https://python-all.ru/3.8/library/io.html#io-overview), Python различает двоичный и текстовый ввод-вывод. Файлы, открытые в двоичном режиме (включая `'b'` в аргументе *mode*), возвращают содержимое в виде объектов [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes) без какого-либо декодирования. В текстовом режиме (по умолчанию или когда `'t'` включён в аргумент *mode*) содержимое файла возвращается как [`str`](https://python-all.ru/3.8/library/stdtypes.html#str), при этом байты предварительно декодируются с использованием кодировки, зависящей от платформы, или указанной *encoding*, если она задана.635636Разрешён дополнительный символ режима, `'U'`, который больше не оказывает никакого эффекта и считается устаревшим. Ранее он включал [универсальные символы новой строки](https://python-all.ru/3.8/glossary.html#term-universal-newlines) в текстовом режиме, что стало поведением по умолчанию в Python 3.0. Обратитесь к документации параметра [newline](https://python-all.ru/3.8/library/functions.html#open-newline-parameter) для получения дополнительных сведений.637638> **Примечание**639>640> Python не зависит от представления текстовых файлов в базовой операционной системе; вся обработка выполняется самим Python и, следовательно, не зависит от платформы.641642*buffering* – необязательное целое число, используемое для задания политики буферизации. Передайте 0, чтобы отключить буферизацию (допустимо только в двоичном режиме), 1 – для построчной буферизации (работает только в текстовом режиме), и целое число больше 1 – для указания размера буфера фиксированными блоками в байтах. Если аргумент *buffering* не задан, политика буферизации по умолчанию работает следующим образом:643644- Двоичные файлы буферизируются блоками фиксированного размера; размер буфера выбирается эвристически, пытаясь определить «размер блока» нижележащего устройства, и при неудаче используется [`io.DEFAULT_BUFFER_SIZE`](https://python-all.ru/3.8/library/io.html#io.DEFAULT_BUFFER_SIZE). Во многих системах размер буфера обычно составляет 4096 или 8192 байта.645- «Интерактивные» текстовые файлы (файлы, для которых [`isatty()`](https://python-all.ru/3.8/library/io.html#io.IOBase.isatty) возвращает `True`) используют построчную буферизацию. Остальные текстовые файлы используют политику, описанную выше для двоичных файлов.646647*encoding* – имя кодировки, используемой для декодирования или кодирования файла. Это следует использовать только в текстовом режиме. Кодировка по умолчанию зависит от платформы (то, что возвращает [`locale.getpreferredencoding()`](https://python-all.ru/3.8/library/locale.html#locale.getpreferredencoding)), но может использоваться любая [текстовая кодировка](https://python-all.ru/3.8/glossary.html#term-text-encoding), поддерживаемая Python. См. модуль [`codecs`](https://python-all.ru/3.8/library/codecs.html#module-codecs) для списка поддерживаемых кодировок.648649*errors* – необязательная строка, определяющая, как обрабатывать ошибки кодирования и декодирования; этот параметр нельзя использовать в двоичном режиме. Доступны различные стандартные обработчики ошибок (перечислены в разделе [Обработчики ошибок](https://python-all.ru/3.8/library/codecs.html#error-handlers)), однако также подходит любое имя обработчика, зарегистрированное с помощью [`codecs.register_error()`](https://python-all.ru/3.8/library/codecs.html#codecs.register_error). Стандартные имена включают:650651- `'strict'` – возбуждать исключение [`ValueError`](https://python-all.ru/3.8/library/exceptions.html#ValueError) при ошибке кодирования. Значение по умолчанию `None` имеет тот же эффект.652- `'ignore'` – игнорировать ошибки. Учтите, что игнорирование ошибок кодирования может привести к потере данных.653- `'replace'` – вставляет заменяющий символ (например, `'?'`) в местах повреждённых данных.654- `'surrogateescape'` будет представлять любые некорректные байты как кодовые точки в Unicode Private Use Area в диапазоне от U+DC80 до U+DCFF. Затем эти частные кодовые точки будут преобразованы обратно в те же байты при использовании обработчика ошибок `surrogateescape` при записи данных. Это полезно для обработки файлов с неизвестной кодировкой.655- `'xmlcharrefreplace'` поддерживается только при записи в файл. Символы, не поддерживаемые кодировкой, заменяются соответствующей XML-ссылкой на символ `&#nnn;`.656- `'backslashreplace'` заменяет повреждённые данные escape-последовательностями Python с обратной косой чертой.657- `'namereplace'` (также поддерживается только при записи) заменяет неподдерживаемые символы escape-последовательностями `\N{...}`.658659*newline* управляет работой режима [универсальных символов новой строки](https://python-all.ru/3.8/glossary.html#term-universal-newlines) (действует только в текстовом режиме). Может принимать значения `None`, `''`, `'\n'`, `'\r'` и `'\r\n'`. Работает следующим образом:660661- При чтении из потока, если *newline* равен `None`, включается универсальный режим новых строк. Строки во входных данных могут заканчиваться на `'\n'`, `'\r'` или `'\r\n'`; перед возвратом вызывающему коду они преобразуются в `'\n'`. Если равен `''`, универсальный режим новых строк включён, но концы строк возвращаются как есть, без преобразования. Если задано любое другое допустимое значение, строки на входе завершаются только заданной строкой, и конец строки возвращается вызывающему коду без изменений.662- При записи в поток, если *newline* равен `None`, все символы `'\n'` преобразуются в системный разделитель строк по умолчанию [`os.linesep`](https://python-all.ru/3.8/library/os.html#os.linesep). Если *newline* равен `''` или `'\n'`, преобразование не выполняется. Если *newline* равен любому другому допустимому значению, все символы `'\n'` преобразуются в заданную строку.663664Если *closefd* равен `False` и был передан файловый дескриптор, а не имя файла, базовый файловый дескриптор останется открытым при закрытии файла. Если передано имя файла, *closefd* должно быть `True` (значение по умолчанию), иначе будет возбуждена ошибка.665666Можно задать собственный «открыватель», передав вызываемый объект как *opener*. Базовый файловый дескриптор для файлового объекта получается вызовом *opener* с аргументами (*file*, *flags*). *opener* должен вернуть открытый файловый дескриптор (передача [`os.open`](https://python-all.ru/3.8/library/os.html#os.open) в качестве *opener* даёт результат, аналогичный передаче `None`).667668Созданный файл является [ненаследуемым](https://python-all.ru/3.8/library/os.html#fd-inheritance).669670В следующем примере используется параметр [dir\_fd](https://python-all.ru/3.8/library/os.html#dir-fd) функции [`os.open()`](https://python-all.ru/3.8/library/os.html#os.open) для открытия файла относительно заданного каталога:671672```python673>>> import os674>>> dir_fd = os.open('somedir', os.O_RDONLY)675>>> def opener(path, flags):676... return os.open(path, flags, dir_fd=dir_fd)677...678>>> with open('spamspam.txt', 'w', opener=opener) as f:679... print('This will be written to somedir/spamspam.txt', file=f)680...681>>> os.close(dir_fd) # не допустить утечки файлового дескриптора682```683684Тип [файлового объекта](https://python-all.ru/3.8/glossary.html#term-file-object), возвращаемого функцией [`open()`](https://python-all.ru/3.8/library/functions.html#open), зависит от режима. При использовании [`open()`](https://python-all.ru/3.8/library/functions.html#open) для открытия файла в текстовом режиме (`'w'`, `'r'`, `'wt'`, `'rt'` и т.д.) возвращается подкласс [`io.TextIOBase`](https://python-all.ru/3.8/library/io.html#io.TextIOBase) (а именно [`io.TextIOWrapper`](https://python-all.ru/3.8/library/io.html#io.TextIOWrapper)). При открытии файла в двоичном режиме с буферизацией возвращаемый класс является подклассом [`io.BufferedIOBase`](https://python-all.ru/3.8/library/io.html#io.BufferedIOBase). Конкретный класс различается: в режиме чтения в двоичном виде возвращается [`io.BufferedReader`](https://python-all.ru/3.8/library/io.html#io.BufferedReader); в режимах записи и добавления в двоичном виде – [`io.BufferedWriter`](https://python-all.ru/3.8/library/io.html#io.BufferedWriter), а в режиме чтения/записи – [`io.BufferedRandom`](https://python-all.ru/3.8/library/io.html#io.BufferedRandom). Если буферизация отключена, возвращается необработанный поток – подкласс [`io.RawIOBase`](https://python-all.ru/3.8/library/io.html#io.RawIOBase), [`io.FileIO`](https://python-all.ru/3.8/library/io.html#io.FileIO).685686См. также модули для работы с файлами: [`fileinput`](https://python-all.ru/3.8/library/fileinput.html#module-fileinput), [`io`](https://python-all.ru/3.8/library/io.html#module-io) (где объявлен [`open()`](https://python-all.ru/3.8/library/functions.html#open)), [`os`](https://python-all.ru/3.8/library/os.html#module-os), [`os.path`](https://python-all.ru/3.8/library/os.path.html#module-os.path), [`tempfile`](https://python-all.ru/3.8/library/tempfile.html#module-tempfile) и [`shutil`](https://python-all.ru/3.8/library/shutil.html#module-shutil).687688Вызывает [событие аудита](https://python-all.ru/3.8/library/sys.html#auditing) `open` с аргументами `file`, `mode`, `flags`.689690Аргументы `mode` и `flags` могли быть изменены или определены на основе исходного вызова.691692> Изменено в версии 3.3:693>694> - Добавлен параметр *opener*.695> - Добавлен режим `'x'`.696> - [`IOError`](https://python-all.ru/3.8/library/exceptions.html#IOError) ранее возбуждался, теперь это псевдоним [`OSError`](https://python-all.ru/3.8/library/exceptions.html#OSError).697> - Теперь возбуждается [`FileExistsError`](https://python-all.ru/3.8/library/exceptions.html#FileExistsError), если файл, открываемый в эксклюзивном режиме создания (`'x'`), уже существует.698699> Изменено в версии 3.4:700>701> - Файл теперь является ненаследуемым.702703Устарело с версии 3.4, будет удалено в версии 3.9: Режим `'U'`.704705> Изменено в версии 3.5:706>707> - Если системный вызов был прерван и обработчик сигнала не возбудил исключение, функция теперь повторяет системный вызов вместо возбуждения исключения [`InterruptedError`](https://python-all.ru/3.8/library/exceptions.html#InterruptedError) (см. [**PEP 475**](https://python-all.ru/3.8/library/functions.html) для обоснования).708> - Добавлен обработчик ошибок `'namereplace'`.709710> Изменено в версии 3.6:711>712> - Добавлена поддержка объектов, реализующих [`os.PathLike`](https://python-all.ru/3.8/library/os.html#os.PathLike).713> - В Windows открытие консольного буфера может вернуть подкласс [`io.RawIOBase`](https://python-all.ru/3.8/library/io.html#io.RawIOBase), отличный от [`io.FileIO`](https://python-all.ru/3.8/library/io.html#io.FileIO).714715#### `ord(c)`716717Принимает строку, представляющую один символ Unicode, и возвращает целое число – кодовую точку Unicode этого символа. Например, `ord('a')` возвращает целое число `97`, а `ord('€')` (знак евро) возвращает `8364`. Это функция, обратная [`chr()`](https://python-all.ru/3.8/library/functions.html#chr).718719#### `pow(base, exp[, mod])`720721Возвращает *base* в степени *exp*; если указан *mod*, возвращает *base* в степени *exp* по модулю *mod* (вычисляется эффективнее, чем `pow(base, exp) % mod`). Двухаргументная форма `pow(base, exp)` эквивалентна использованию оператора возведения в степень: `base**exp`.722723Аргументы должны иметь числовые типы. При смешанных типах операндов применяются правила приведения для бинарных арифметических операторов. Для операндов [`int`](https://python-all.ru/3.8/library/functions.html#int) результат имеет тот же тип, что и операнды (после приведения), если только второй аргумент не отрицателен; в этом случае все аргументы преобразуются в float и возвращается результат типа float. Например, `10**2` возвращает `100`, но `10**-2` возвращает `0.01`.724725Для операндов [`int`](https://python-all.ru/3.8/library/functions.html#int) *base* и *exp*, если указан *mod*, *mod* также должен быть целого типа, и *mod* должен быть ненулевым. Если *mod* указан и *exp* отрицателен, *base* должен быть взаимно прост с *mod*. В этом случае возвращается `pow(inv_base, -exp, mod)`, где *inv\_base* – обратный элемент к *base* по модулю *mod*.726727Вот пример вычисления обратного элемента для `38` по модулю `97`:728729```python730>>> pow(38, -1, mod=97)73123732>>> 23 * 38 % 97 == 1733True734```735736Изменено в версии 3.8: Для операндов [`int`](https://python-all.ru/3.8/library/functions.html#int) трёхаргументная форма `pow` теперь допускает отрицательный второй аргумент, что позволяет вычислять обратные элементы по модулю.737738Изменено в версии 3.8: Разрешены именованные аргументы. Ранее поддерживались только позиционные аргументы.739740#### `print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)`741742Выводит *objects* в текстовый поток *file*, разделяя их *sep* и завершая *end*. *sep*, *end*, *file* и *flush*, если присутствуют, должны передаваться как именованные аргументы.743744Все неименованные аргументы преобразуются в строки, как [`str()`](https://python-all.ru/3.8/library/stdtypes.html#str), и записываются в поток, разделённые *sep* и завершаемые *end*. Оба *sep* и *end* должны быть строками; они также могут быть `None`, что означает использование значений по умолчанию. Если *objects* не указаны, [`print()`](https://python-all.ru/3.8/library/functions.html#print) просто запишет *end*.745746Аргумент *file* должен быть объектом с методом `write(string)`; если он не указан или равен `None`, будет использоваться [`sys.stdout`](https://python-all.ru/3.8/library/sys.html#sys.stdout). Так как выводимые аргументы преобразуются в текстовые строки, [`print()`](https://python-all.ru/3.8/library/functions.html#print) нельзя использовать с файловыми объектами в бинарном режиме. Для них используйте `file.write(...)`.747748Обычно буферизация вывода определяется параметром *file*, но если именованный аргумент *flush* равен True, поток принудительно сбрасывается.749750Изменено в версии 3.3: Добавлен именованный аргумент *flush*.751752#### `class property(fget=None, fset=None, fdel=None, doc=None)`753754Возвращает атрибут property.755756*fget* – функция для получения значения атрибута. *fset* – функция для установки значения атрибута. *fdel* – функция для удаления значения атрибута. А *doc* создаёт строку документации для атрибута.757758Типичное использование – определить управляемый атрибут `x`:759760```python761class C:762 def __init__(self):763 self._x = None764765 def getx(self):766 return self._x767768 def setx(self, value):769 self._x = value770771 def delx(self):772 del self._x773774 x = property(getx, setx, delx, "I'm the 'x' property.")775```776777Если *c* – экземпляр *C*, то `c.x` вызовет геттер, `c.x = value` вызовет сеттер, а `del c.x` – делитер.778779Если указан, *doc* будет строкой документации атрибута property. В противном случае property скопирует строку документации *fget* (если она существует). Это позволяет легко создавать свойства только для чтения, используя [`property()`](https://python-all.ru/3.8/library/functions.html#property) в качестве [декоратора](https://python-all.ru/3.8/glossary.html#term-decorator):780781```python782class Parrot:783 def __init__(self):784 self._voltage = 100000785786 @property787 def voltage(self):788 """Получить текущее напряжение."""789 return self._voltage790```791792Декоратор `@property` превращает метод `voltage()` в «геттер» для атрибута только для чтения с тем же именем и устанавливает строку документации для *voltage* в «Get the current voltage.»793794Объект property имеет методы `getter`, `setter` и `deleter`, которые можно использовать как декораторы; они создают копию свойства с соответствующей функцией доступа, установленной в декорированную функцию. Лучше всего это объяснить на примере:795796```python797class C:798 def __init__(self):799 self._x = None800801 @property802 def x(self):803 """Я – свойство 'x'."""804 return self._x805806 @x.setter807 def x(self, value):808 self._x = value809810 @x.deleter811 def x(self):812 del self._x813```814815Этот код полностью эквивалентен первому примеру. Убедитесь, что дополнительные функции имеют то же имя, что и исходное свойство (`x` в данном случае.)816817Возвращаемый объект property также имеет атрибуты `fget`, `fset` и `fdel`, соответствующие аргументам конструктора.818819Изменено в версии 3.5: Строки документации объектов property теперь доступны для записи.820821#### `class range(stop)`822823#### `class range(start, stop[, step])`824825[`range`](https://python-all.ru/3.8/library/stdtypes.html#range) – не функция, а неизменяемый тип последовательности, как описано в [Ranges](https://python-all.ru/3.8/library/stdtypes.html#typesseq-range) и [Sequence Types – list, tuple, range](https://python-all.ru/3.8/library/stdtypes.html#typesseq).826827#### `repr(object)`828829Возвращает строку, содержащую печатное представление объекта. Для многих типов эта функция пытается вернуть строку, при передаче которой в [`eval()`](https://python-all.ru/3.8/library/functions.html#eval) будет получен объект с тем же значением, в противном случае представление представляет собой строку в угловых скобках, содержащую имя типа объекта и дополнительную информацию, часто включающую имя и адрес объекта. Класс может управлять тем, что возвращает эта функция для своих экземпляров, определив метод [`__repr__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__repr__).830831#### `reversed(seq)`832833Возвращает обратный [итератор](https://python-all.ru/3.8/glossary.html#term-iterator). *seq* должен быть объектом с методом [`__reversed__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__reversed__) или поддерживающим протокол последовательности (методы [`__len__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__len__) и [`__getitem__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getitem__) с целочисленными аргументами, начиная с `0`).834835#### `round(number[, ndigits])`836837Возвращает *number*, округлённое до *ndigits* знаков после запятой. Если *ndigits* опущено или равно `None`, возвращается ближайшее целое к входному значению.838839Для встроенных типов, поддерживающих [`round()`](https://python-all.ru/3.8/library/functions.html#round), значения округляются до ближайшего кратного 10 в степени минус *ndigits*; если два ближайших значения одинаково близки, округление производится к чётному выбору (например, и `round(0.5)`, и `round(-0.5)` округляются до `0`, а `round(1.5)` – до `2`). Любое целое значение может быть использовано для *ndigits* (положительное, ноль или отрицательное). Возвращаемое значение – целое число, если *ndigits* опущен или равен `None`. В противном случае возвращаемое значение имеет тот же тип, что и *number*.840841Для произвольного объекта Python `number` функция `round` делегирует выполнение `number.__round__`.842843> **Примечание**844>845> Поведение [`round()`](https://python-all.ru/3.8/library/functions.html#round) для чисел с плавающей точкой может быть неожиданным: например, `round(2.675, 2)` даёт `2.67` вместо ожидаемого `2.68`. Это не ошибка: это результат того, что большинство десятичных дробей невозможно точно представить в виде числа с плавающей точкой. Подробнее см. [Арифметика с плавающей точкой: проблемы и ограничения](https://python-all.ru/3.8/tutorial/floatingpoint.html#tut-fp-issues).846847#### `class set([iterable])`848849Возвращает новый объект [`set`](https://python-all.ru/3.8/library/stdtypes.html#set), опционально с элементами, взятыми из *итерируемого объекта*. `set` – это встроенный класс. См. [`set`](https://python-all.ru/3.8/library/stdtypes.html#set) и [Типы множеств – set, frozenset](https://python-all.ru/3.8/library/stdtypes.html#types-set) для документации об этом классе.850851Для других контейнеров см. встроенные классы [`frozenset`](https://python-all.ru/3.8/library/stdtypes.html#frozenset), [`list`](https://python-all.ru/3.8/library/stdtypes.html#list), [`tuple`](https://python-all.ru/3.8/library/stdtypes.html#tuple) и [`dict`](https://python-all.ru/3.8/library/stdtypes.html#dict), а также модуль [`collections`](https://python-all.ru/3.8/library/collections.html#module-collections).852853#### `setattr(object, name, value)`854855Это аналог [`getattr()`](https://python-all.ru/3.8/library/functions.html#getattr). Аргументами являются объект, строка и произвольное значение. Строка может задавать существующий или новый атрибут. Функция присваивает значение атрибуту, если объект это позволяет. Например, `setattr(x, 'foobar', 123)` эквивалентно `x.foobar = 123`.856857#### `class slice(stop)`858859#### `class slice(start, stop[, step])`860861Возвращает объект [slice](https://python-all.ru/3.8/glossary.html#term-slice), представляющий набор индексов, заданных `range(start, stop, step)`. Аргументы *start* и *step* по умолчанию равны `None`. Объекты slice имеют атрибуты только для чтения `start`, `stop` и `step`, которые просто возвращают значения аргументов (или значения по умолчанию). Они не имеют другой явной функциональности; однако они используются Numerical Python и другими сторонними расширениями. Объекты slice также создаются при использовании расширенного синтаксиса индексации. Например: `a[start:stop:step]` или `a[start:stop, i]`. См. [`itertools.islice()`](https://python-all.ru/3.8/library/itertools.html#itertools.islice) для альтернативной версии, возвращающей итератор.862863#### `sorted(iterable, *, key=None, reverse=False)`864865Возвращает новый отсортированный список из элементов *итерируемого объекта*.866867Имеет два необязательных аргумента, которые должны быть указаны как именованные.868869*key* задаёт функцию одного аргумента, которая извлекает ключ сравнения из каждого элемента *итерируемого объекта* (например, `key=str.lower`). Значение по умолчанию – `None` (сравнивает элементы напрямую).870871*reverse* – логическое значение. Если указано `True`, то элементы списка сортируются так, как если бы каждое сравнение было обратным.872873Используйте [`functools.cmp_to_key()`](https://python-all.ru/3.8/library/functools.html#functools.cmp_to_key) для преобразования устаревшей функции *cmp* в функцию *key*.874875Встроенная функция [`sorted()`](https://python-all.ru/3.8/library/functions.html#sorted) гарантированно устойчива. Сортировка называется устойчивой, если она не меняет относительный порядок элементов, которые сравниваются как равные. Это удобно при многоуровневой сортировке (например, сначала по отделу, затем по зарплатной категории).876877Примеры сортировки и краткое руководство см. в [Sorting HOW TO](https://python-all.ru/3.8/howto/sorting.html#sortinghowto).878879#### `@staticmethod`880881Преобразует метод в статический метод.882883Статический метод не получает неявный первый аргумент. Чтобы объявить статический метод, используйте такую идиому:884885```python886class C:887 @staticmethod888 def f(arg1, arg2, ...): ...889```890891Форма `@staticmethod` является функцией [декоратора](https://python-all.ru/3.8/glossary.html#term-decorator) – подробнее см. в [Function definitions](https://python-all.ru/3.8/reference/compound_stmts.html#function).892893Статический метод можно вызвать как от класса (например, `C.f()`), так и от экземпляра (например, `C().f()`).894895Статические методы в Python похожи на аналоги из Java или C++. Также смотрите [`classmethod()`](https://python-all.ru/3.8/library/functions.html#classmethod) – вариант, полезный для создания альтернативных конструкторов класса.896897Как и все декораторы, `staticmethod` можно вызвать как обычную функцию и что-то сделать с её результатом. Это необходимо в тех случаях, когда нужна ссылка на функцию из тела класса и требуется избежать автоматического преобразования в метод экземпляра. Для таких случаев используйте следующую идиому:898899```python900class C:901 builtin_open = staticmethod(open)902```903904Дополнительную информацию о статических методах см. в [The standard type hierarchy](https://python-all.ru/3.8/reference/datamodel.html#types).905906#### `class str(object='')`907908#### `class str(object=b'', encoding='utf-8', errors='strict')`909910Возвращает [`str`](https://python-all.ru/3.8/library/stdtypes.html#str)-версию *объекта*. Подробнее см. [`str()`](https://python-all.ru/3.8/library/stdtypes.html#str).911912`str` – это встроенный строковый [класс](https://python-all.ru/3.8/glossary.html#term-class). Общую информацию о строках см. в [Text Sequence Type – str](https://python-all.ru/3.8/library/stdtypes.html#textseq).913914#### `sum(iterable, /, start=0)`915916Суммирует *start* и элементы *итерируемого объекта* слева направо и возвращает общую сумму. Элементы *итерируемого объекта* обычно являются числами, а начальное значение не может быть строкой.917918Для некоторых случаев существуют хорошие альтернативы [`sum()`](https://python-all.ru/3.8/library/functions.html#sum). Предпочтительный и быстрый способ конкатенации последовательности строк – вызов `''.join(sequence)`. Для сложения чисел с плавающей точкой с повышенной точностью см. [`math.fsum()`](https://python-all.ru/3.8/library/math.html#math.fsum). Для конкатенации последовательности итерируемых объектов рассмотрите [`itertools.chain()`](https://python-all.ru/3.8/library/itertools.html#itertools.chain).919920Изменено в версии 3.8: Параметр *start* теперь можно указывать как именованный аргумент.921922#### `super([type[, object-or-type]])`923924Возвращает объект-посредник, который делегирует вызовы методов родительскому или родственному классу *type*. Это полезно для доступа к унаследованным методам, которые были переопределены в классе.925926Параметр *object-or-type* определяет [порядок разрешения методов](https://python-all.ru/3.8/glossary.html#term-method-resolution-order), по которому будет производиться поиск. Поиск начинается с класса, следующего сразу за *type*.927928Например, если [`__mro__`](https://python-all.ru/3.8/library/stdtypes.html#class.__mro__) для *object-or-type* равно `D -> B -> C -> A -> object`, а значение *type* – `B`, то [`super()`](https://python-all.ru/3.8/library/functions.html#super) выполняет поиск по `C -> A -> object`.929930Атрибут [`__mro__`](https://python-all.ru/3.8/library/stdtypes.html#class.__mro__) объекта *object-or-type* содержит перечень порядка разрешения методов, используемого как [`getattr()`](https://python-all.ru/3.8/library/functions.html#getattr), так и [`super()`](https://python-all.ru/3.8/library/functions.html#super). Этот атрибут динамический и может изменяться при обновлении иерархии наследования.931932Если второй аргумент опущен, возвращается несвязанный объект super. Если второй аргумент является объектом, `isinstance(obj, type)` должно быть истинно. Если второй аргумент является типом, `issubclass(type2, type)` должно быть истинно (это полезно для методов класса).933934Существует два типичных варианта использования *super*. В иерархии классов с одиночным наследованием *super* можно использовать для ссылки на родительские классы без явного указания их имен, что делает код более поддерживаемым. Это использование тесно параллельно использованию *super* в других языках программирования.935936Второй вариант использования – поддержка кооперативного множественного наследования в динамической среде выполнения. Этот случай уникален для Python и не встречается в статически компилируемых языках или языках, поддерживающих только одиночное наследование. Это позволяет реализовать «ромбовидные диаграммы», где несколько базовых классов реализуют один и тот же метод. Хорошее проектирование требует, чтобы такие реализации имели одинаковую сигнатуру вызова во всех случаях (поскольку порядок вызовов определяется во время выполнения, поскольку этот порядок адаптируется к изменениям в иерархии классов и может включать родственные классы, неизвестные до выполнения).937938Для обоих вариантов использования типичный вызов родительского класса выглядит так:939940```python941class C(B):942 def method(self, arg):943 super().method(arg) # Делает то же самое, что и:944 # super(C, self).method(arg)945```946947В дополнение к поиску методов, [`super()`](https://python-all.ru/3.8/library/functions.html#super) также работает для поиска атрибутов. Один из возможных вариантов использования – вызов [дескрипторов](https://python-all.ru/3.8/glossary.html#term-descriptor) в родительском или родственном классе.948949Обратите внимание, что [`super()`](https://python-all.ru/3.8/library/functions.html#super) реализован как часть процесса связывания для явных точечных обращений к атрибутам, таких как `super().__getitem__(name)`. Это делается путём реализации собственного метода [`__getattribute__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattribute__) для поиска классов в предсказуемом порядке, поддерживающем кооперативное множественное наследование. Соответственно, [`super()`](https://python-all.ru/3.8/library/functions.html#super) не определён для неявных обращений с использованием инструкций или операторов, таких как `super()[name]`.950951Также обратите внимание, что, за исключением формы без аргументов, [`super()`](https://python-all.ru/3.8/library/functions.html#super) не ограничен использованием внутри методов. Форма с двумя аргументами точно задает аргументы и создает соответствующие ссылки. Форма без аргументов работает только внутри определения класса, так как компилятор заполняет необходимые детали для правильного извлечения определяемого класса, а также для доступа к текущему экземпляру в обычных методах.952953Практические рекомендации по проектированию кооперативных классов с использованием [`super()`](https://python-all.ru/3.8/library/functions.html#super) см. в [руководстве по использованию super()](https://python-all.ru/3.8/library/functions.html).954955#### `class tuple([iterable])`956957[`tuple`](https://python-all.ru/3.8/library/stdtypes.html#tuple) на самом деле не функция, а неизменяемый тип последовательности, как описано в [Кортежи](https://python-all.ru/3.8/library/stdtypes.html#typesseq-tuple) и [Типы последовательностей – list, tuple, range](https://python-all.ru/3.8/library/stdtypes.html#typesseq).958959#### `class type(object)`960961#### `class type(name, bases, dict, **kwds)`962963С одним аргументом возвращает тип объекта *object*. Возвращаемое значение – объект типа, как правило, тот же объект, что и возвращаемый [`object.__class__`](https://python-all.ru/3.8/library/stdtypes.html#instance.__class__).964965Встроенная функция [`isinstance()`](https://python-all.ru/3.8/library/functions.html#isinstance) рекомендуется для проверки типа объекта, поскольку она учитывает подклассы.966967С тремя аргументами возвращает новый объект типа. По сути, это динамическая форма оператора [`class`](https://python-all.ru/3.8/reference/compound_stmts.html#class). Строка *name* – это имя класса, она становится атрибутом [`__name__`](https://python-all.ru/3.8/library/stdtypes.html#definition.__name__). Кортеж *bases* содержит базовые классы и становится атрибутом [`__bases__`](https://python-all.ru/3.8/library/stdtypes.html#class.__bases__); если он пуст, добавляется [`object`](https://python-all.ru/3.8/library/functions.html#object) – конечный базовый класс всех классов. Словарь *dict* содержит определения атрибутов и методов тела класса; он может быть скопирован или обёрнут перед тем, как стать атрибутом [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__). Следующие два оператора создают идентичные объекты [`type`](https://python-all.ru/3.8/library/functions.html#type):968969```python970>>> class X:971... a = 1972...973>>> X = type('X', (), dict(a=1))974```975976См. также [Type Objects](https://python-all.ru/3.8/library/stdtypes.html#bltin-type-objects).977978Именованные аргументы, переданные форме с тремя аргументами, передаются соответствующему механизму метакласса (обычно [`__init_subclass__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__init_subclass__)) так же, как и ключевые слова в определении класса (кроме *metaclass*).979980См. также [Настройка создания классов](https://python-all.ru/3.8/reference/datamodel.html#class-customization).981982Изменено в версии 3.6: Подклассы [`type`](https://python-all.ru/3.8/library/functions.html#type), не переопределяющие `type.__new__`, больше не могут использовать форму с одним аргументом для получения типа объекта.983984#### `vars([object])`985986Возвращает атрибут [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__) для модуля, класса, экземпляра или любого другого объекта с атрибутом [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__).987988Такие объекты, как модули и экземпляры, имеют обновляемый атрибут [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__); однако другие объекты могут иметь ограничения на запись своих атрибутов [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__) (например, классы используют [`types.MappingProxyType`](https://python-all.ru/3.8/library/types.html#types.MappingProxyType) для предотвращения прямых изменений словаря).989990Без аргумента [`vars()`](https://python-all.ru/3.8/library/functions.html#vars) ведёт себя как [`locals()`](https://python-all.ru/3.8/library/functions.html#locals). Примечание: словарь locals полезен только для чтения, так как обновления словаря locals игнорируются.991992Исключение [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError) возбуждается, если указан объект, но у него нет атрибута [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__) (например, если его класс определяет атрибут [`__slots__`](https://python-all.ru/3.8/reference/datamodel.html#object.__slots__)).993994#### `zip(*iterables)`995996Создаёт итератор, который объединяет элементы из каждой из переданных итерируемых последовательностей.997998Возвращает итератор кортежей, где *i*-й кортеж содержит *i*-й элемент из каждой последовательности аргументов или итерируемого объекта. Итератор останавливается, когда исчерпывается самая короткая входная последовательность. С одним аргументом-итератором возвращает итератор кортежей из одного элемента. Без аргументов возвращает пустой итератор. Эквивалентно:9991000```python1001def zip(*iterables):1002 # zip('ABCD', 'xy') --> Ax By1003 sentinel = object()1004 iterators = [iter(it) for it in iterables]1005 while iterators:1006 result = []1007 for it in iterators:1008 elem = next(it, sentinel)1009 if elem is sentinel:1010 return1011 result.append(elem)1012 yield tuple(result)1013```10141015Гарантируется порядок вычисления слева направо. Это позволяет реализовать идиому для группировки данных в группы длины n с помощью `zip(*[iter(s)]*n)`. При этом *тот же самый* итератор повторяется `n` раз, так что каждый выходной кортеж содержит результат `n` вызовов итератора. Это приводит к разбиению входных данных на блоки длины n.10161017[`zip()`](https://python-all.ru/3.8/library/functions.html#zip) следует использовать только с последовательностями разной длины, если не важны несовпавшие хвостовые значения из более длинных последовательностей. Если эти значения важны, используйте [`itertools.zip_longest()`](https://python-all.ru/3.8/library/itertools.html#itertools.zip_longest).10181019[`zip()`](https://python-all.ru/3.8/library/functions.html#zip) в сочетании с оператором `*` можно использовать для распаковки списка:10201021```python1022>>> x = [1, 2, 3]1023>>> y = [4, 5, 6]1024>>> zipped = zip(x, y)1025>>> list(zipped)1026[(1, 4), (2, 5), (3, 6)]1027>>> x2, y2 = zip(*zip(x, y))1028>>> x == list(x2) and y == list(y2)1029True1030```10311032#### `__import__(name, globals=None, locals=None, fromlist=(), level=0)`10331034> **Примечание**1035>1036> Это продвинутая функция, которая не требуется в повседневном программировании на Python, в отличие от [`importlib.import_module()`](https://python-all.ru/3.8/library/importlib.html#importlib.import_module).10371038Эта функция вызывается оператором [`import`](https://python-all.ru/3.8/reference/simple_stmts.html#import). Её можно заменить (импортировав модуль [`builtins`](https://python-all.ru/3.8/library/builtins.html#module-builtins) и присвоив `builtins.__import__`), чтобы изменить семантику оператора `import`, но делать это **настоятельно** не рекомендуется, так как обычно проще использовать перехватчики импорта (см. [**PEP 302**](https://python-all.ru/3.8/library/functions.html)) для достижения тех же целей, и это не вызывает проблем с кодом, предполагающим использование реализации импорта по умолчанию. Прямое использование [`__import__()`](https://python-all.ru/3.8/library/functions.html#__import__) также не рекомендуется, вместо него следует использовать [`importlib.import_module()`](https://python-all.ru/3.8/library/importlib.html#importlib.import_module).10391040Функция импортирует модуль *name*, потенциально используя переданные *globals* и *locals* для определения того, как интерпретировать имя в контексте пакета. *fromlist* задаёт имена объектов или подмодулей, которые должны быть импортированы из модуля, указанного в *name*. Стандартная реализация вообще не использует свой аргумент *locals*, а *globals* использует только для определения контекста пакета для оператора [`import`](https://python-all.ru/3.8/reference/simple_stmts.html#import).10411042*level* указывает, использовать ли абсолютный или относительный импорт. `0` (по умолчанию) означает только абсолютный импорт. Положительные значения *level* указывают количество родительских каталогов для поиска относительно каталога модуля, вызывающего [`__import__()`](https://python-all.ru/3.8/library/functions.html#__import__) (подробнее см. [**PEP 328**](https://python-all.ru/3.8/library/functions.html)).10431044Когда переменная *name* имеет вид `package.module`, обычно возвращается пакет верхнего уровня (имя до первой точки), а *не* модуль, названный *name*. Однако, если передан непустой аргумент *fromlist*, возвращается модуль, названный *name*.10451046Например, оператор `import spam` приводит к байт-коду, напоминающему следующий код:10471048```python1049spam = __import__('spam', globals(), locals(), [], 0)1050```10511052Оператор `import spam.ham` приводит к следующему вызову:10531054```python1055spam = __import__('spam.ham', globals(), locals(), [], 0)1056```10571058Обратите внимание, как [`__import__()`](https://python-all.ru/3.8/library/functions.html#__import__) возвращает модуль верхнего уровня, потому что это объект, который привязывается к имени оператором [`import`](https://python-all.ru/3.8/reference/simple_stmts.html#import).10591060С другой стороны, оператор `from spam.ham import eggs, sausage as saus` приводит к10611062```python1063_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)1064eggs = _temp.eggs1065saus = _temp.sausage1066```10671068Здесь модуль `spam.ham` возвращается из [`__import__()`](https://python-all.ru/3.8/library/functions.html#__import__). Из этого объекта извлекаются имена для импорта и присваиваются соответствующим именам.10691070Если требуется просто импортировать модуль (возможно, внутри пакета) по имени, используйте [`importlib.import_module()`](https://python-all.ru/3.8/library/importlib.html#importlib.import_module).10711072Изменено в версии 3.3: Отрицательные значения *level* больше не поддерживаются (это также меняет значение по умолчанию на 0).10731074Сноски10751076**[1](https://python-all.ru/3.8/library/functions.html#id1)**10771078Обратите внимание, что анализатор принимает только соглашение о концах строк в стиле Unix. Если вы читаете код из файла, убедитесь, что используете режим преобразования символов новой строки для преобразования концов строк в стиле Windows или Mac.1079