glossary.md
1> **Источник:** https://python-all.ru/3.7/glossary.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Глоссарий89**`>>>`**1011Приглашение по умолчанию в интерактивной оболочке Python. Часто встречается в примерах кода, которые можно выполнять в интерпретаторе в интерактивном режиме.1213**`...`**1415Приглашение по умолчанию в интерактивной оболочке Python при вводе кода для блока с отступом, при нахождении внутри пары соответствующих друг другу открывающих и закрывающих разделителей (круглых скобок, квадратных скобок, фигурных скобок или тройных кавычек) или после указания декоратора.1617**2to3**1819Инструмент, преобразующий код Python 2.x в код Python 3.x путём обработки большинства несовместимостей, которые можно обнаружить при разборе исходного кода и обходе дерева разбора.20212to3 доступен в стандартной библиотеке как [`lib2to3`](https://python-all.ru/3.7/library/2to3.html#module-lib2to3); отдельная точка входа предоставляется как `Tools/scripts/2to3`. См. [2to3 – автоматический перевод кода Python 2 в Python 3](https://python-all.ru/3.7/library/2to3.html#to3-reference).2223**абстрактный базовый класс**2425Абстрактные базовые классы дополняют [утиную типизацию](https://python-all.ru/3.7/glossary.html#term-duck-typing), предоставляя способ определения интерфейсов, когда другие подходы, такие как [`hasattr()`](https://python-all.ru/3.7/library/functions.html#hasattr), были бы неуклюжими или вводили бы в заблуждение (например, с [магическими методами](https://python-all.ru/3.7/reference/datamodel.html#special-lookup)). ABC вводят виртуальные подклассы – классы, которые не наследуются от данного класса, но всё равно распознаются функциями [`isinstance()`](https://python-all.ru/3.7/library/functions.html#isinstance) и [`issubclass()`](https://python-all.ru/3.7/library/functions.html#issubclass); см. документацию модуля [`abc`](https://python-all.ru/3.7/library/abc.html#module-abc). Python поставляется со многими встроенными ABC для структур данных (в модуле [`collections.abc`](https://python-all.ru/3.7/library/collections.abc.html#module-collections.abc)), чисел (в модуле [`numbers`](https://python-all.ru/3.7/library/numbers.html#module-numbers)), потоков (в модуле [`io`](https://python-all.ru/3.7/library/io.html#module-io)), искателей и загрузчиков импорта (в модуле [`importlib.abc`](https://python-all.ru/3.7/library/importlib.html#module-importlib.abc)). Можно создавать собственные ABC с помощью модуля [`abc`](https://python-all.ru/3.7/library/abc.html#module-abc).2627**аннотация**2829Метка, связанная с переменной, атрибутом класса, параметром функции или возвращаемым значением, используемая по соглашению как [подсказка типа](https://python-all.ru/3.7/glossary.html#term-type-hint).3031Аннотации локальных переменных недоступны во время выполнения, но аннотации глобальных переменных, атрибутов класса и функций хранятся в `__annotations__` специальном атрибуте модулей, классов и функций соответственно.3233См. [аннотации переменных](https://python-all.ru/3.7/glossary.html#term-variable-annotation), [аннотации функций](https://python-all.ru/3.7/glossary.html#term-function-annotation), [**PEP 484**](https://python-all.ru/3.7/glossary.html) и [**PEP 526**](https://python-all.ru/3.7/glossary.html), в которых описывается эта функциональность.3435**аргумент**3637Значение, передаваемое [функции](https://python-all.ru/3.7/glossary.html#term-function) (или [методу](https://python-all.ru/3.7/glossary.html#term-method)) при вызове функции. Существует два вида аргументов:3839- *именованный аргумент*: аргумент, перед которым стоит идентификатор (например, `name=`) в вызове функции или переданный как значение в словаре перед `**`. Например, `3` и `5` оба являются именованными аргументами в следующих вызовах [`complex()`](https://python-all.ru/3.7/library/functions.html#complex):4041 ```python42 complex(real=3, imag=5)43 complex(**{'real': 3, 'imag': 5})44 ```45- *позиционный аргумент*: аргумент, не являющийся именованным. Позиционные аргументы могут находиться в начале списка аргументов и/или передаваться как элементы [итерируемого объекта](https://python-all.ru/3.7/glossary.html#term-iterable) перед `*`. Например, `3` и `5` оба являются позиционными аргументами в следующих вызовах:4647 ```python48 complex(3, 5)49 complex(*(3, 5))50 ```5152Аргументы присваиваются именованным локальным переменным в теле функции. См. раздел [Вызовы](https://python-all.ru/3.7/reference/expressions.html#calls) для правил, регулирующих это присваивание. Синтаксически для представления аргумента можно использовать любое выражение; вычисленное значение присваивается локальной переменной.5354См. также запись глоссария [параметр](https://python-all.ru/3.7/glossary.html#term-parameter), вопрос FAQ о [различии между аргументами и параметрами](https://python-all.ru/3.7/faq/programming.html#faq-argument-vs-parameter), и [**PEP 362**](https://python-all.ru/3.7/glossary.html).5556**асинхронный контекстный менеджер**5758Объект, управляющий окружением в операторе [`async with`](https://python-all.ru/3.7/reference/compound_stmts.html#async-with) путём определения методов [`__aenter__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__aenter__) и [`__aexit__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__aexit__). Введён в [**PEP 492**](https://python-all.ru/3.7/glossary.html).5960**асинхронный генератор**6162Функция, возвращающая [асинхронный генератор-итератор](https://python-all.ru/3.7/glossary.html#term-asynchronous-generator-iterator). Она выглядит как корутинная функция, определённая с [`async def`](https://python-all.ru/3.7/reference/compound_stmts.html#async-def), за исключением того, что содержит выражения [`yield`](https://python-all.ru/3.7/reference/simple_stmts.html#yield) для получения последовательности значений, которые можно использовать в цикле [`async for`](https://python-all.ru/3.7/reference/compound_stmts.html#async-for).6364Обычно относится к асинхронной генераторной функции, но в некоторых контекстах может относиться к *асинхронному генератору-итератору*. Если предполагаемое значение неясно, использование полных терминов позволяет избежать неоднозначности.6566Асинхронная генераторная функция может содержать выражения [`await`](https://python-all.ru/3.7/reference/expressions.html#await), а также [`async for`](https://python-all.ru/3.7/reference/compound_stmts.html#async-for) и операторы [`async with`](https://python-all.ru/3.7/reference/compound_stmts.html#async-with).6768**итератор асинхронного генератора**6970Объект, созданный функцией [асинхронного генератора](https://python-all.ru/3.7/glossary.html#term-asynchronous-generator).7172Это [асинхронный итератор](https://python-all.ru/3.7/glossary.html#term-asynchronous-iterator), который при вызове метода [`__anext__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__anext__) возвращает ожидаемый объект, выполняющий тело асинхронной генераторной функции до следующего выражения [`yield`](https://python-all.ru/3.7/reference/simple_stmts.html#yield).7374Каждая [`yield`](https://python-all.ru/3.7/reference/simple_stmts.html#yield) временно приостанавливает обработку, запоминая местоположение и состояние выполнения (включая локальные переменные и ожидающие try-инструкции). Когда *итератор асинхронного генератора* фактически возобновляется с другим ожидаемым объектом, возвращённым [`__anext__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__anext__), он продолжает с того места, где остановился. См. [**PEP 492**](https://python-all.ru/3.7/glossary.html) и [**PEP 525**](https://python-all.ru/3.7/glossary.html).7576**асинхронный итерируемый объект**7778Объект, который можно использовать в операторе [`async for`](https://python-all.ru/3.7/reference/compound_stmts.html#async-for). Из своего метода [`__aiter__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__aiter__) должен возвращать [асинхронный итератор](https://python-all.ru/3.7/glossary.html#term-asynchronous-iterator). Введён [**PEP 492**](https://python-all.ru/3.7/glossary.html).7980**асинхронный итератор**8182Объект, реализующий методы [`__aiter__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__aiter__) и [`__anext__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__anext__). Метод `__anext__` должен возвращать [ожидаемый объект](https://python-all.ru/3.7/glossary.html#term-awaitable). [`async for`](https://python-all.ru/3.7/reference/compound_stmts.html#async-for) разрешает ожидаемые объекты, возвращаемые методом [`__anext__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__anext__) асинхронного итератора, пока не возникнет исключение [`StopAsyncIteration`](https://python-all.ru/3.7/library/exceptions.html#StopAsyncIteration). Введён [**PEP 492**](https://python-all.ru/3.7/glossary.html).8384**атрибут**8586Значение, связанное с объектом, на которое ссылаются по имени с помощью выражений с точкой. Например, если объект *o* имеет атрибут *a*, на него можно сослаться как *o.a*.8788**ожидаемый объект**8990Объект, который можно использовать в выражении [`await`](https://python-all.ru/3.7/reference/expressions.html#await). Это может быть [корутина](https://python-all.ru/3.7/glossary.html#term-coroutine) или объект с методом [`__await__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__await__). См. также [**PEP 492**](https://python-all.ru/3.7/glossary.html).9192**BDFL**9394Доброжелательный диктатор на всю жизнь, также известный как [Гвидо ван Россум](https://python-all.ru/3.7/glossary.html), создатель Python.9596**двоичный файл**9798Объект [файловый объект](https://python-all.ru/3.7/glossary.html#term-file-object), способный читать и записывать [байтоподобные объекты](https://python-all.ru/3.7/glossary.html#term-bytes-like-object). Примеры двоичных файлов: файлы, открытые в двоичном режиме (`'rb'`, `'wb'` или `'rb+'`), `sys.stdin.buffer`, `sys.stdout.buffer`, а также экземпляры [`io.BytesIO`](https://python-all.ru/3.7/library/io.html#io.BytesIO) и [`gzip.GzipFile`](https://python-all.ru/3.7/library/gzip.html#gzip.GzipFile).99100См. также [текстовый файл](https://python-all.ru/3.7/glossary.html#term-text-file) – файловый объект, который может читать и записывать объекты [`str`](https://python-all.ru/3.7/library/stdtypes.html#str).101102**байтоподобный объект**103104Объект, поддерживающий [протокол буфера](https://python-all.ru/3.7/c-api/buffer.html#bufferobjects) и способный экспортировать C-[непрерывный](https://python-all.ru/3.7/glossary.html#term-contiguous) буфер. Сюда входят все объекты [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes), [`bytearray`](https://python-all.ru/3.7/library/stdtypes.html#bytearray) и [`array.array`](https://python-all.ru/3.7/library/array.html#array.array), а также многие распространённые объекты [`memoryview`](https://python-all.ru/3.7/library/stdtypes.html#memoryview). Байтоподобные объекты могут использоваться в различных операциях с двоичными данными: сжатие, сохранение в двоичный файл, отправка через сокет.105106Некоторым операциям требуются изменяемые двоичные данные. В документации они часто называются «байтоподобные объекты для чтения и записи». Примерами изменяемых буферных объектов являются [`bytearray`](https://python-all.ru/3.7/library/stdtypes.html#bytearray) и [`memoryview`](https://python-all.ru/3.7/library/stdtypes.html#memoryview) объекта [`bytearray`](https://python-all.ru/3.7/library/stdtypes.html#bytearray). Другие операции требуют хранения двоичных данных в неизменяемых объектах («байтоподобные объекты только для чтения»); примеры включают [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) и [`memoryview`](https://python-all.ru/3.7/library/stdtypes.html#memoryview) объекта [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).107108**байткод**109110Исходный код Python компилируется в байткод – внутреннее представление программы Python в интерпретаторе CPython. Байткод также кэшируется в файлах `.pyc`, чтобы при повторном выполнении того же файла работа происходила быстрее (повторная компиляция из исходного кода в байткод не требуется). Этот «промежуточный язык», как говорят, выполняется на [виртуальной машине](https://python-all.ru/3.7/glossary.html#term-virtual-machine), которая исполняет машинный код, соответствующий каждому байткоду. Следует отметить, что байткоды не должны работать в разных виртуальных машинах Python и не обязаны быть стабильными между версиями Python.111112Список инструкций байткода можно найти в документации [модуля dis](https://python-all.ru/3.7/library/dis.html#bytecodes).113114**класс**115116Шаблон для создания пользовательских объектов. Определения классов обычно содержат определения методов, которые работают с экземплярами класса.117118**переменная класса**119120Переменная, определенная в классе и предназначенная для изменения только на уровне класса (т.е. не в экземпляре класса).121122**приведение типов**123124Неявное преобразование экземпляра одного типа в другой во время операции, включающей два аргумента одного типа. Например, `int(3.15)` преобразует число с плавающей запятой в целое `3`, но в `3+4.5` каждый аргумент имеет разный тип (один int, один float), и оба должны быть преобразованы к одному типу перед сложением, иначе будет возбуждено исключение [`TypeError`](https://python-all.ru/3.7/library/exceptions.html#TypeError). Без приведения типов программисту пришлось бы нормализовать все аргументы даже совместимых типов к одному значению, например, `float(3)+4.5` вместо `3+4.5`.125126**комплексное число**127128Расширение привычной системы действительных чисел, в котором все числа выражаются как сумма действительной и мнимой частей. Мнимые числа – это действительные кратные мнимой единицы (квадратный корень из `-1`), часто обозначаемой `i` в математике или `j` в инженерии. Python имеет встроенную поддержку комплексных чисел, которые записываются в этой последней нотации; мнимая часть записывается с суффиксом `j`, например, `3+1j`. Чтобы получить доступ к комплексным аналогам модуля [`math`](https://python-all.ru/3.7/library/math.html#module-math), используйте [`cmath`](https://python-all.ru/3.7/library/cmath.html#module-cmath). Использование комплексных чисел – довольно продвинутая математическая возможность. Если нет очевидной необходимости в них, их почти наверняка можно безопасно игнорировать.129130**контекстный менеджер**131132Объект, управляющий окружением в операторе [`with`](https://python-all.ru/3.7/reference/compound_stmts.html#with) путём определения методов [`__enter__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__exit__). См. [**PEP 343**](https://python-all.ru/3.7/glossary.html).133134**контекстная переменная**135136Переменная, которая может принимать разные значения в зависимости от контекста. Это похоже на локальное хранилище потоков (Thread-Local Storage), в котором каждый поток может иметь своё значение переменной. Однако для контекстных переменных в одном потоке может быть несколько контекстов, и основное их применение – отслеживание переменных в параллельных асинхронных задачах. См. [`contextvars`](https://python-all.ru/3.7/library/contextvars.html#module-contextvars).137138**непрерывный**139140Буфер считается непрерывным, если он является либо *C-непрерывным*, либо *непрерывным по Фортрану*. Нулевые буферы являются C- и Fortran-непрерывными. В одномерных массивах элементы должны располагаться в памяти рядом друг с другом, в порядке возрастания индексов, начиная с нуля. В многомерных C-непрерывных массивах последний индекс меняется быстрее всего при обходе элементов в порядке адресов памяти. Однако в массивах, непрерывных по Фортрану, первым меняется первый индекс.141142**корутина**143144Корутины – это более обобщенная форма подпрограмм. Подпрограммы вызываются в одной точке и завершаются в другой. Корутины могут вызываться, приостанавливаться и возобновляться во многих разных точках. Они могут быть реализованы с помощью оператора [`async def`](https://python-all.ru/3.7/reference/compound_stmts.html#async-def). См. также [**PEP 492**](https://python-all.ru/3.7/glossary.html).145146**корутинная функция**147148Функция, возвращающая объект [корутина](https://python-all.ru/3.7/glossary.html#term-coroutine). Корутинная функция может быть определена с помощью оператора [`async def`](https://python-all.ru/3.7/reference/compound_stmts.html#async-def) и может содержать ключевые слова [`await`](https://python-all.ru/3.7/reference/expressions.html#await), [`async for`](https://python-all.ru/3.7/reference/compound_stmts.html#async-for) и [`async with`](https://python-all.ru/3.7/reference/compound_stmts.html#async-with). Они были введены в [**PEP 492**](https://python-all.ru/3.7/glossary.html).149150**CPython**151152Каноническая реализация языка программирования Python, распространяемая на [python.org](https://python-all.ru/3.7/glossary.html). Термин «CPython» используется, когда необходимо отличить эту реализацию от других, таких как Jython или IronPython.153154**декоратор**155156Функция, возвращающая другую функцию, обычно применяется как преобразование функции с помощью синтаксиса `@wrapper`. Распространённые примеры декораторов: [`classmethod()`](https://python-all.ru/3.7/library/functions.html#classmethod) и [`staticmethod()`](https://python-all.ru/3.7/library/functions.html#staticmethod).157158Синтаксис декоратора – всего лишь синтаксический сахар, следующие два определения функций семантически эквивалентны:159160```python161def f(...):162 ...163f = staticmethod(f)164165@staticmethod166def f(...):167 ...168```169170Та же концепция существует и для классов, но там используется реже. См. документацию по [определениям функций](https://python-all.ru/3.7/reference/compound_stmts.html#function) и [определениям классов](https://python-all.ru/3.7/reference/compound_stmts.html#class) для получения дополнительной информации о декораторах.171172**дескриптор**173174Любой объект, определяющий методы [`__get__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__get__), [`__set__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__set__) или [`__delete__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__delete__). Когда атрибут класса является дескриптором, его особое поведение при связывании срабатывает при поиске атрибута. Обычно использование *a.b* для получения, установки или удаления атрибута ищет объект с именем *b* в словаре класса для *a*, но если *b* является дескриптором, то вызывается соответствующий метод дескриптора. Понимание дескрипторов – ключ к глубокому пониманию Python, поскольку они лежат в основе многих возможностей, включая функции, методы, свойства, методы класса, статические методы и ссылки на суперклассы.175176Подробнее о методах дескрипторов см. в [Implementing Descriptors](https://python-all.ru/3.7/reference/datamodel.html#descriptors).177178**словарь**179180Ассоциативный массив, в котором произвольные ключи сопоставляются значениям. Ключами могут быть любые объекты с методами [`__hash__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__hash__) и [`__eq__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__eq__). В Perl называется хешем.181182**представление словаря**183184Объекты, возвращаемые методами [`dict.keys()`](https://python-all.ru/3.7/library/stdtypes.html#dict.keys), [`dict.values()`](https://python-all.ru/3.7/library/stdtypes.html#dict.values) и [`dict.items()`](https://python-all.ru/3.7/library/stdtypes.html#dict.items), называются представлениями словаря. Они предоставляют динамическое представление записей словаря, то есть при изменении словаря представление отражает эти изменения. Чтобы преобразовать представление словаря в обычный список, используйте `list(dictview)`. См. [Объекты представлений словаря](https://python-all.ru/3.7/library/stdtypes.html#dict-views).185186**докстринг**187188Строковый литерал, который появляется как первое выражение в классе, функции или модуле. Хотя он игнорируется при выполнении кода внутри блока, компилятор распознаёт его и помещает в атрибут `__doc__` содержащего класса, функции или модуля. Поскольку к нему можно получить доступ через интроспекцию, это каноническое место для документации объекта.189190**утиная типизация**191192Стиль программирования, который не проверяет тип объекта для определения, обладает ли он нужным интерфейсом; вместо этого метод или атрибут просто вызывается или используется («Если это выглядит как утка и крякает как утка, значит, это утка»). Делая упор на интерфейсы, а не на конкретные типы, хорошо спроектированный код повышает гибкость за счёт полиморфной замены. Утиная типизация избегает проверок с помощью [`type()`](https://python-all.ru/3.7/library/functions.html#type) или [`isinstance()`](https://python-all.ru/3.7/library/functions.html#isinstance). (Однако утиную типизацию можно дополнить [абстрактными базовыми классами](https://python-all.ru/3.7/glossary.html#term-abstract-base-class).) Вместо этого она обычно использует проверки [`hasattr()`](https://python-all.ru/3.7/library/functions.html#hasattr) или программирование в стиле [EAFP](https://python-all.ru/3.7/glossary.html#term-eafp).193194**EAFP**195196Легче попросить прощения, чем разрешения. Этот распространённый стиль программирования на Python предполагает наличие допустимых ключей или атрибутов и перехватывает исключения, если предположение оказывается неверным. Этот чистый и быстрый стиль характеризуется наличием множества операторов [`try`](https://python-all.ru/3.7/reference/compound_stmts.html#try) и [`except`](https://python-all.ru/3.7/reference/compound_stmts.html#except). Этот подход противопоставляется стилю [LBYL](https://python-all.ru/3.7/glossary.html#term-lbyl), распространённому во многих других языках, таких как C.197198**выражение**199200Фрагмент синтаксиса, который можно вычислить для получения некоторого значения. Иными словами, выражение – это совокупность элементов выражения, таких как литералы, имена, доступ к атрибутам, операторы или вызовы функций, которые возвращают значение. В отличие от многих других языков, не все языковые конструкции являются выражениями. Существуют также [оператор](https://python-all.ru/3.7/glossary.html#term-statement)ы, которые не могут использоваться как выражения, например [`while`](https://python-all.ru/3.7/reference/compound_stmts.html#while). Присваивания также являются операторами, а не выражениями.201202**модуль-расширение**203204Модуль, написанный на C или C++, использующий C API Python для взаимодействия с ядром и пользовательским кодом.205206**f-строка**207208Строковые литералы с префиксом `'f'` или `'F'` обычно называются «f-строками», что является сокращением от [форматированных строковых литералов](https://python-all.ru/3.7/reference/lexical_analysis.html#f-strings). См. также [**PEP 498**](https://python-all.ru/3.7/glossary.html).209210**файловый объект**211212Объект, предоставляющий файловый API (с методами, такими как `read()` или `write()`) для нижележащего ресурса. В зависимости от способа создания, файловый объект может обеспечивать доступ к реальному файлу на диске или к другому типу хранилища или устройства связи (например, стандартный ввод/вывод, буферы в памяти, сокеты, каналы и т.д.). Файловые объекты также называются *объектами, подобными файлам* или *потоками данных*.213214There are actually three categories of file objects: raw [binary files](https://python-all.ru/3.7/glossary.html#term-binary-file), buffered [binary files](https://python-all.ru/3.7/glossary.html#term-binary-file) and [text files](https://python-all.ru/3.7/glossary.html#term-text-file). Their interfaces are defined in the [`io`](https://python-all.ru/3.7/library/io.html#module-io) module. The canonical way to create a file object is by using the [`open()`](https://python-all.ru/3.7/library/functions.html#open) function.215216**файлоподобный объект**217218Синоним для [файлового объекта](https://python-all.ru/3.7/glossary.html#term-file-object).219220**искатель**221222Объект, который пытается найти [загрузчик](https://python-all.ru/3.7/glossary.html#term-loader) для импортируемого модуля.223224Начиная с Python 3.3, существуют два типа искателей: [мета-искатели путей](https://python-all.ru/3.7/glossary.html#term-meta-path-finder) для использования с [`sys.meta_path`](https://python-all.ru/3.7/library/sys.html#sys.meta_path), и [искатели элементов путей](https://python-all.ru/3.7/glossary.html#term-path-entry-finder) для использования с [`sys.path_hooks`](https://python-all.ru/3.7/library/sys.html#sys.path_hooks).225226См. [**PEP 302**](https://python-all.ru/3.7/glossary.html), [**PEP 420**](https://python-all.ru/3.7/glossary.html) и [**PEP 451**](https://python-all.ru/3.7/glossary.html) для получения более подробной информации.227228**целочисленное деление**229230Математическое деление, округляющее результат до ближайшего целого вниз. Оператор деления с округлением вниз – `//`. Например, выражение `11 // 4` вычисляется в `2` в отличие от `2.75`, возвращаемого при истинном делении с плавающей запятой. Обратите внимание, что `(-11) // 4` равно `-3`, потому что это `-2.75`, округлённое *вниз*. См. [**PEP 238**](https://python-all.ru/3.7/glossary.html).231232**функция**233234Последовательность инструкций, которая возвращает некоторое значение вызывающему коду. В неё также можно передать ноль или более [аргументов](https://python-all.ru/3.7/glossary.html#term-argument), которые могут использоваться при выполнении тела. См. также [параметр](https://python-all.ru/3.7/glossary.html#term-parameter), [метод](https://python-all.ru/3.7/glossary.html#term-method), и раздел [Определения функций](https://python-all.ru/3.7/reference/compound_stmts.html#function).235236**аннотация функции**237238[Аннотация](https://python-all.ru/3.7/glossary.html#term-annotation) параметра функции или возвращаемого значения.239240Аннотации функций обычно используются для [подсказок типов](https://python-all.ru/3.7/glossary.html#term-type-hint): например, ожидается, что эта функция принимает два [`int`](https://python-all.ru/3.7/library/functions.html#int) аргумента, а также имеет [`int`](https://python-all.ru/3.7/library/functions.html#int) возвращаемое значение:241242```python243def sum_two_numbers(a: int, b: int) -> int:244 return a + b245```246247Синтаксис аннотаций функций описан в разделе [Определения функций](https://python-all.ru/3.7/reference/compound_stmts.html#function).248249См. [аннотации переменных](https://python-all.ru/3.7/glossary.html#term-variable-annotation) и [**PEP 484**](https://python-all.ru/3.7/glossary.html), в которых описывается эта функциональность.250251**future**252253Псевдомодуль, с помощью которого программисты могут включать новые возможности языка, несовместимые с текущим интерпретатором.254255Импортировав модуль [`__future__`](https://python-all.ru/3.7/library/__future__.html#module-__future__) и вычислив его переменные, можно увидеть, когда новая возможность была впервые добавлена в язык и когда она становится используемой по умолчанию:256257```python258>>> import __future__259>>> __future__.division260_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)261```262263**сборка мусора**264265Процесс освобождения памяти, когда она больше не используется. Python выполняет сборку мусора с помощью подсчёта ссылок и циклического сборщика мусора, который может обнаруживать и разрывать циклические ссылки. Сборщиком мусора можно управлять с помощью модуля [`gc`](https://python-all.ru/3.7/library/gc.html#module-gc).266267**генератор**268269Функция, возвращающая [итератор генератора](https://python-all.ru/3.7/glossary.html#term-generator-iterator). Она выглядит как обычная функция, за исключением того, что содержит выражения [`yield`](https://python-all.ru/3.7/reference/simple_stmts.html#yield) для получения последовательности значений, которые можно использовать в цикле for или получать по одному с помощью функции [`next()`](https://python-all.ru/3.7/library/functions.html#next).270271Обычно относится к функции-генератору, но в некоторых контекстах может относиться к *итератору генератора*. Если предполагаемое значение неясно, использование полных терминов позволяет избежать неоднозначности.272273**итератор генератора**274275Объект, созданный функцией [генератора](https://python-all.ru/3.7/glossary.html#term-generator).276277Каждая [`yield`](https://python-all.ru/3.7/reference/simple_stmts.html#yield) временно приостанавливает обработку, запоминая местоположение и состояние выполнения (включая локальные переменные и ожидающие try-инструкции). Когда *итератор генератора* возобновляется, он продолжает с того места, где остановился (в отличие от функций, которые каждый раз начинают заново).278279**генераторное выражение**280281Выражение, возвращающее итератор. Оно выглядит как обычное выражение, за которым следует предложение `for`, определяющее переменную цикла, диапазон и необязательное предложение `if`. Объединённое выражение генерирует значения для внешней функции:282283```python284>>> sum(i*i for i in range(10)) # сумма квадратов 0, 1, 4, ... 81285285286```287288**обобщённая функция**289290Функция, состоящая из нескольких функций, реализующих одну и ту же операцию для разных типов. Какая реализация должна использоваться при вызове, определяется алгоритмом диспетчеризации.291292См. также статью глоссария [одиночная диспетчеризация](https://python-all.ru/3.7/glossary.html#term-single-dispatch), декоратор [`functools.singledispatch()`](https://python-all.ru/3.7/library/functools.html#functools.singledispatch) и [**PEP 443**](https://python-all.ru/3.7/glossary.html).293294**GIL**295296См. [глобальная блокировка интерпретатора](https://python-all.ru/3.7/glossary.html#term-global-interpreter-lock).297298**глобальная блокировка интерпретатора**299300Механизм, используемый интерпретатором [CPython](https://python-all.ru/3.7/glossary.html#term-cpython) для обеспечения того, чтобы только один поток выполнял [байт-код](https://python-all.ru/3.7/glossary.html#term-bytecode) Python в каждый момент времени. Это упрощает реализацию CPython, делая объектную модель (включая критические встроенные типы, такие как [`dict`](https://python-all.ru/3.7/library/stdtypes.html#dict)) неявно безопасной при конкурентном доступе. Блокировка всего интерпретатора упрощает многопоточность интерпретатора, но ценой потери большей части параллелизма, обеспечиваемого многопроцессорными машинами.301302Однако некоторые расширяющие модули, как стандартные, так и сторонние, спроектированы так, чтобы освобождать GIL при выполнении вычислительно интенсивных задач, таких как сжатие или хеширование. Кроме того, GIL всегда освобождается при выполнении операций ввода-вывода.303304Прежние попытки создать «свободно-поточный» интерпретатор (тот, который блокирует общие данные с гораздо более мелкой гранулярностью) не увенчались успехом, потому что производительность страдала в типичном случае с одним процессором. Считается, что преодоление этой проблемы производительности сделало бы реализацию гораздо более сложной и, следовательно, более дорогой в сопровождении.305306**pyc-файл на основе хеша**307308Файл кэша байт-кода, который использует хеш, а не время последнего изменения соответствующего исходного файла для определения своей действительности. См. [Инвалидация кэшированного байт-кода](https://python-all.ru/3.7/reference/import.html#pyc-invalidation).309310**хешируемый**311312Объект называется *хешируемым*, если он имеет хеш-значение, которое никогда не меняется за время его существования (для этого требуется метод [`__hash__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__hash__)), и может сравниваться с другими объектами (для этого требуется метод [`__eq__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__eq__)). Хешируемые объекты, равные при сравнении, должны иметь одинаковое хеш-значение.313314Хешируемость позволяет использовать объект в качестве ключа словаря и элемента множества, поскольку эти структуры данных внутренне используют хеш-значение.315316Большинство неизменяемых встроенных объектов Python хешируемы; изменяемые контейнеры (например, списки или словари) – нет; неизменяемые контейнеры (например, кортежи и frozenset) хешируемы только в том случае, если их элементы хешируемы. Объекты, являющиеся экземплярами пользовательских классов, хешируемы по умолчанию. Все они не равны при сравнении (за исключением сравнения с самим собой), и их хеш-значение получается из [`id()`](https://python-all.ru/3.7/library/functions.html#id).317318**IDLE**319320Интегрированная среда разработки для Python. IDLE – это базовый редактор и среда интерпретатора, которая поставляется со стандартной дистрибуцией Python.321322**неизменяемый**323324Объект с фиксированным значением. К неизменяемым объектам относятся числа, строки и кортежи. Такой объект нельзя изменить. Если требуется сохранить другое значение, необходимо создать новый объект. Они играют важную роль там, где требуется постоянное хеш-значение, например в качестве ключа в словаре.325326**путь импорта**327328Список расположений (или [записей пути](https://python-all.ru/3.7/glossary.html#term-path-entry)), которые просматриваются [искателем на основе пути](https://python-all.ru/3.7/glossary.html#term-path-based-finder) для поиска модулей для импорта. Во время импорта этот список расположений обычно берётся из [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path), но для подпакетов он также может браться из атрибута `__path__` родительского пакета.329330**импортирование**331332Процесс, благодаря которому код Python в одном модуле становится доступным коду Python в другом модуле.333334**импортёр**335336Объект, который одновременно находит и загружает модуль; объект, являющийся как [искателем](https://python-all.ru/3.7/glossary.html#term-finder), так и [загрузчиком](https://python-all.ru/3.7/glossary.html#term-loader).337338**интерактивный**339340Python имеет интерактивный интерпретатор, что позволяет вводить инструкции и выражения в приглашении интерпретатора, немедленно выполнять их и видеть результаты. Для этого достаточно запустить `python` без аргументов (возможно, выбрав его из главного меню компьютера). Это очень мощный способ проверки новых идей или изучения модулей и пакетов (помните `help(x)`).341342**интерпретируемый**343344Python является интерпретируемым языком, в отличие от компилируемых, хотя различие может быть размытым из-за наличия компилятора байткода. Это означает, что исходные файлы можно запускать напрямую, без явного создания исполняемого файла, который затем выполняется. Интерпретируемые языки обычно имеют более короткий цикл разработки/отладки, чем компилируемые, хотя их программы, как правило, выполняются медленнее. См. также [интерактивный](https://python-all.ru/3.7/glossary.html#term-interactive).345346**завершение работы интерпретатора**347348При запросе на завершение работы интерпретатор Python переходит в специальную фазу, на которой постепенно освобождает все выделенные ресурсы, такие как модули и различные критические внутренние структуры. Он также несколько раз вызывает [сборщик мусора](https://python-all.ru/3.7/glossary.html#term-garbage-collection). Это может вызвать выполнение кода в пользовательских деструкторах или колбэках слабых ссылок. Код, выполняемый во время фазы завершения работы, может столкнуться с различными исключениями, поскольку используемые им ресурсы могут перестать работать (типичные примеры – библиотечные модули или механизм предупреждений).349350Основная причина завершения работы интерпретатора – завершение выполнения `__main__` модуля или запущенного скрипта.351352**итерируемый объект**353354Объект, способный возвращать свои элементы по одному. Примеры итерируемых объектов включают все типы последовательностей (такие как [`list`](https://python-all.ru/3.7/library/stdtypes.html#list), [`str`](https://python-all.ru/3.7/library/stdtypes.html#str) и [`tuple`](https://python-all.ru/3.7/library/stdtypes.html#tuple)), а также некоторые непоследовательные типы, например [`dict`](https://python-all.ru/3.7/library/stdtypes.html#dict), [файловые объекты](https://python-all.ru/3.7/glossary.html#term-file-object) и объекты любых классов, определённых пользователем с методом [`__iter__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__iter__) или методом [`__getitem__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__getitem__), реализующим семантику [Sequence](https://python-all.ru/3.7/glossary.html#term-sequence).355356Итерируемые объекты можно использовать в цикле [`for`](https://python-all.ru/3.7/reference/compound_stmts.html#for) и во многих других местах, где требуется последовательность ([`zip()`](https://python-all.ru/3.7/library/functions.html#zip), [`map()`](https://python-all.ru/3.7/library/functions.html#map), …). Когда итерируемый объект передаётся в качестве аргумента встроенной функции [`iter()`](https://python-all.ru/3.7/library/functions.html#iter), она возвращает итератор для этого объекта. Этот итератор пригоден для однократного прохода по набору значений. При работе с итерируемыми объектами обычно не требуется вызывать [`iter()`](https://python-all.ru/3.7/library/functions.html#iter) или самостоятельно работать с объектами итераторов. Инструкция `for` делает это автоматически, создавая временную безымянную переменную для хранения итератора на время цикла. См. также [итератор](https://python-all.ru/3.7/glossary.html#term-iterator), [последовательность](https://python-all.ru/3.7/glossary.html#term-sequence) и [генератор](https://python-all.ru/3.7/glossary.html#term-generator).357358**итератор**359360Объект, представляющий поток данных. Повторные вызовы метода [`__next__()`](https://python-all.ru/3.7/library/stdtypes.html#iterator.__next__) итератора (или передача его встроенной функции [`next()`](https://python-all.ru/3.7/library/functions.html#next)) возвращают последовательные элементы потока. Когда данные заканчиваются, возбуждается исключение [`StopIteration`](https://python-all.ru/3.7/library/exceptions.html#StopIteration). После этого объект итератора исчерпан, и любой дальнейший вызов его метода `__next__()` снова возбуждает [`StopIteration`](https://python-all.ru/3.7/library/exceptions.html#StopIteration). Итераторы должны иметь метод [`__iter__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__iter__), который возвращает сам объект итератора, поэтому каждый итератор также является итерируемым и может использоваться в большинстве мест, где принимаются другие итерируемые объекты. Одним заметным исключением является код, который пытается выполнить многократные проходы итерации. Объект-контейнер (например, [`list`](https://python-all.ru/3.7/library/stdtypes.html#list)) создаёт новый итератор каждый раз, когда вы передаёте его функции [`iter()`](https://python-all.ru/3.7/library/functions.html#iter) или используете в цикле [`for`](https://python-all.ru/3.7/reference/compound_stmts.html#for). Попытка сделать то же самое с итератором приведёт к возврату того же самого исчерпанного объекта итератора, использованного в предыдущем проходе, из-за чего он будет выглядеть как пустой контейнер.361362Дополнительную информацию можно найти в [Iterator Types](https://python-all.ru/3.7/library/stdtypes.html#typeiter).363364**функция ключа**365366Функция-ключ или функция сортировки – это вызываемый объект, возвращающий значение, используемое для сортировки или упорядочивания. Например, [`locale.strxfrm()`](https://python-all.ru/3.7/library/locale.html#locale.strxfrm) используется для создания ключа сортировки, учитывающего локальные соглашения сортировки.367368Ряд инструментов в Python принимают функцию-ключ для управления порядком или группировкой элементов. К ним относятся [`min()`](https://python-all.ru/3.7/library/functions.html#min), [`max()`](https://python-all.ru/3.7/library/functions.html#max), [`sorted()`](https://python-all.ru/3.7/library/functions.html#sorted), [`list.sort()`](https://python-all.ru/3.7/library/stdtypes.html#list.sort), [`heapq.merge()`](https://python-all.ru/3.7/library/heapq.html#heapq.merge), [`heapq.nsmallest()`](https://python-all.ru/3.7/library/heapq.html#heapq.nsmallest), [`heapq.nlargest()`](https://python-all.ru/3.7/library/heapq.html#heapq.nlargest) и [`itertools.groupby()`](https://python-all.ru/3.7/library/itertools.html#itertools.groupby).369370Есть несколько способов создать функцию ключа. Например, метод [`str.lower()`](https://python-all.ru/3.7/library/stdtypes.html#str.lower) может служить функцией ключа для сортировки без учёта регистра. Альтернативно, функцию ключа можно построить из выражения [`lambda`](https://python-all.ru/3.7/reference/expressions.html#lambda), такого как `lambda r: (r[0], r[2])`. Кроме того, модуль [`operator`](https://python-all.ru/3.7/library/operator.html#module-operator) предоставляет три конструктора функций ключа: [`attrgetter()`](https://python-all.ru/3.7/library/operator.html#operator.attrgetter), [`itemgetter()`](https://python-all.ru/3.7/library/operator.html#operator.itemgetter) и [`methodcaller()`](https://python-all.ru/3.7/library/operator.html#operator.methodcaller). Примеры создания и использования функций ключа см. в [Sorting HOW TO](https://python-all.ru/3.7/howto/sorting.html#sortinghowto).371372**именованный аргумент**373374См. [аргумент](https://python-all.ru/3.7/glossary.html#term-argument).375376**lambda**377378Анонимная встроенная функция, состоящая из одного [выражения](https://python-all.ru/3.7/glossary.html#term-expression), которое вычисляется при вызове функции. Синтаксис создания лямбда-функции: `lambda [parameters]: expression`379380**LBYL**381382Сначала проверь, потом делай (Look before you leap). Этот стиль кодирования явно проверяет предусловия перед вызовами или обращениями. Этот стиль противоположен подходу [EAFP](https://python-all.ru/3.7/glossary.html#term-eafp) и характеризуется наличием множества инструкций [`if`](https://python-all.ru/3.7/reference/compound_stmts.html#if).383384В многопоточной среде подход LBYL может привести к состоянию гонки между «проверкой» и «действием». Например, код `if key in mapping: return mapping[key]` может завершиться ошибкой, если другой поток удалит *ключ* из *отображения* после проверки, но до обращения. Эту проблему можно решить с помощью блокировок или используя подход EAFP.385386**list**387388Встроенная в Python [последовательность](https://python-all.ru/3.7/glossary.html#term-sequence). Несмотря на название, она больше похожа на массив из других языков, чем на связный список, поскольку доступ к элементам осуществляется за O(1).389390**генератор списка**391392Компактный способ обработки всех или части элементов последовательности и возврата списка с результатами. `result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0]` генерирует список строк, содержащих чётные шестнадцатеричные числа (0x..) в диапазоне от 0 до 255. Предложение [`if`](https://python-all.ru/3.7/reference/compound_stmts.html#if) является необязательным. Если оно опущено, обрабатываются все элементы в `range(256)`.393394**загрузчик**395396Объект, который загружает модуль. Он должен определять метод с именем `load_module()`. Загрузчик обычно возвращается [искателем](https://python-all.ru/3.7/glossary.html#term-finder). См. [**PEP 302**](https://python-all.ru/3.7/glossary.html) для подробностей и [`importlib.abc.Loader`](https://python-all.ru/3.7/library/importlib.html#importlib.abc.Loader) для [абстрактного базового класса](https://python-all.ru/3.7/glossary.html#term-abstract-base-class).397398**магический метод**399400Неформальный синоним [специального метода](https://python-all.ru/3.7/glossary.html#term-special-method).401402**отображение**403404Контейнер, поддерживающий произвольный поиск по ключу и реализующий методы, указанные в [`Mapping`](https://python-all.ru/3.7/library/collections.abc.html#collections.abc.Mapping) или [`MutableMapping`](https://python-all.ru/3.7/library/collections.abc.html#collections.abc.MutableMapping) [абстрактных базовых классов](https://python-all.ru/3.7/library/collections.abc.html#collections-abstract-base-classes). Примеры включают [`dict`](https://python-all.ru/3.7/library/stdtypes.html#dict), [`collections.defaultdict`](https://python-all.ru/3.7/library/collections.html#collections.defaultdict), [`collections.OrderedDict`](https://python-all.ru/3.7/library/collections.html#collections.OrderedDict) и [`collections.Counter`](https://python-all.ru/3.7/library/collections.html#collections.Counter).405406**искатель мета-пути**407408[Искатель](https://python-all.ru/3.7/glossary.html#term-finder), возвращаемый поиском по [`sys.meta_path`](https://python-all.ru/3.7/library/sys.html#sys.meta_path). Мета-искатели путей связаны с [искателями записей путей](https://python-all.ru/3.7/glossary.html#term-path-entry-finder), но отличаются от них.409410См. [`importlib.abc.MetaPathFinder`](https://python-all.ru/3.7/library/importlib.html#importlib.abc.MetaPathFinder) для получения списка методов, реализуемых мета-искателями путей.411412**метакласс**413414Класс класса. Определения классов создают имя класса, словарь класса и список базовых классов. Метакласс отвечает за приём этих трёх аргументов и создание класса. Большинство объектно-ориентированных языков программирования предоставляют реализацию по умолчанию. Особенность Python в том, что можно создавать пользовательские метаклассы. Большинству пользователей этот инструмент никогда не понадобится, но когда возникает необходимость, метаклассы могут предоставить мощные и элегантные решения. Они использовались для логирования доступа к атрибутам, добавления потокобезопасности, отслеживания создания объектов, реализации синглтонов и многих других задач.415416Дополнительную информацию можно найти в [Metaclasses](https://python-all.ru/3.7/reference/datamodel.html#metaclasses).417418**метод**419420Функция, определённая внутри тела класса. При вызове как атрибут экземпляра этого класса метод получает объект экземпляра в качестве первого [аргумента](https://python-all.ru/3.7/glossary.html#term-argument) (обычно называемого `self`). См. [функцию](https://python-all.ru/3.7/glossary.html#term-function) и [вложенную область видимости](https://python-all.ru/3.7/glossary.html#term-nested-scope).421422**порядок разрешения методов**423424Порядок разрешения методов – это порядок, в котором базовые классы просматриваются для поиска атрибута. См. [Порядок разрешения методов Python 2.3](https://python-all.ru/3.7/glossary.html) для подробностей алгоритма, используемого интерпретатором Python начиная с версии 2.3.425426**модуль**427428Объект, служащий организационной единицей кода Python. Модули имеют пространство имён, содержащее произвольные объекты Python. Модули загружаются в Python в процессе [импортирования](https://python-all.ru/3.7/glossary.html#term-importing).429430См. также [пакет](https://python-all.ru/3.7/glossary.html#term-package).431432**спецификация модуля**433434Пространство имён, содержащее информацию, связанную с импортом, используемую для загрузки модуля. Экземпляр [`importlib.machinery.ModuleSpec`](https://python-all.ru/3.7/library/importlib.html#importlib.machinery.ModuleSpec).435436**MRO**437438См. [порядок разрешения методов](https://python-all.ru/3.7/glossary.html#term-method-resolution-order).439440**изменяемый**441442Изменяемые объекты могут менять своё значение, но сохраняют свой [`id()`](https://python-all.ru/3.7/library/functions.html#id). См. также [неизменяемый](https://python-all.ru/3.7/glossary.html#term-immutable).443444**именованный кортеж**445446Термин «именованный кортеж» применяется к любому типу или классу, наследующему от tuple и чьи индексируемые элементы также доступны по именованным атрибутам. Такой тип или класс может иметь и другие особенности.447448Несколько встроенных типов являются именованными кортежами, включая значения, возвращаемые [`time.localtime()`](https://python-all.ru/3.7/library/time.html#time.localtime) и [`os.stat()`](https://python-all.ru/3.7/library/os.html#os.stat). Другой пример – [`sys.float_info`](https://python-all.ru/3.7/library/sys.html#sys.float_info):449450```python451>>> sys.float_info[1] # доступ по индексу4521024453>>> sys.float_info.max_exp # доступ по именованному полю4541024455>>> isinstance(sys.float_info, tuple) # вид кортежа456True457```458459Некоторые именованные кортежи являются встроенными типами (как в примерах выше). Альтернативно, именованный кортеж можно создать из обычного определения класса, который наследуется от [`tuple`](https://python-all.ru/3.7/library/stdtypes.html#tuple) и определяет именованные поля. Такой класс можно написать вручную или создать с помощью фабричной функции [`collections.namedtuple()`](https://python-all.ru/3.7/library/collections.html#collections.namedtuple). Последний способ также добавляет несколько дополнительных методов, которые могут отсутствовать в написанных вручную или встроенных именованных кортежах.460461**пространство имён**462463Место, где хранится переменная. Пространства имён реализованы как словари. Существуют локальное, глобальное и встроенное пространства имён, а также вложенные пространства имён в объектах (в методах). Пространства имён способствуют модульности, предотвращая конфликты имён. Например, функции [`builtins.open`](https://python-all.ru/3.7/library/functions.html#open) и [`os.open()`](https://python-all.ru/3.7/library/os.html#os.open) различаются своими пространствами имён. Пространства имён также облегчают читаемость и поддержку, показывая, какой модуль реализует функцию. Например, запись [`random.seed()`](https://python-all.ru/3.7/library/random.html#random.seed) или [`itertools.islice()`](https://python-all.ru/3.7/library/itertools.html#itertools.islice) ясно даёт понять, что эти функции реализованы модулями [`random`](https://python-all.ru/3.7/library/random.html#module-random) и [`itertools`](https://python-all.ru/3.7/library/itertools.html#module-itertools) соответственно.464465**пакет пространства имён**466467[**PEP 420**](https://python-all.ru/3.7/glossary.html) [пакет](https://python-all.ru/3.7/glossary.html#term-package), который служит только контейнером для подпакетов. Пространства имён пакетов могут не иметь физического представления и, в частности, не похожи на [обычный пакет](https://python-all.ru/3.7/glossary.html#term-regular-package), так как у них нет файла `__init__.py`.468469См. также [модуль](https://python-all.ru/3.7/glossary.html#term-module).470471**вложенная область видимости**472473Возможность обращаться к переменной из внешнего определения. Например, функция, определённая внутри другой функции, может обращаться к переменным внешней функции. Обратите внимание: вложенные области видимости по умолчанию работают только для чтения, но не для присваивания. Локальные переменные и читаются, и записываются в самой внутренней области. Аналогично, глобальные переменные читаются и записываются в глобальном пространстве имён. [`nonlocal`](https://python-all.ru/3.7/reference/simple_stmts.html#nonlocal) позволяет записывать во внешние области.474475**класс нового стиля**476477Устаревшее название для разновидности классов, которая сейчас используется для всех объектов-классов. В более ранних версиях Python только классы нового стиля могли использовать новые универсальные возможности Python, такие как [`__slots__`](https://python-all.ru/3.7/reference/datamodel.html#object.__slots__), дескрипторы, свойства, [`__getattribute__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__getattribute__), методы класса и статические методы.478479**объект**480481Любые данные с состоянием (атрибуты или значение) и определённым поведением (методы). Также конечный базовый класс любого [класса нового стиля](https://python-all.ru/3.7/glossary.html#term-new-style-class).482483**пакет**484485Модуль Python [модуль](https://python-all.ru/3.7/glossary.html#term-module), который может содержать подмодули или, рекурсивно, подпакеты. Технически пакет – это модуль Python с атрибутом `__path__`.486487См. также [обычный пакет](https://python-all.ru/3.7/glossary.html#term-regular-package) и [пакет пространства имён](https://python-all.ru/3.7/glossary.html#term-namespace-package).488489**параметр**490491Именованная сущность в определении [функции](https://python-all.ru/3.7/glossary.html#term-function) (или метода), которая указывает на [аргумент](https://python-all.ru/3.7/glossary.html#term-argument) (или в некоторых случаях аргументы), который функция может принимать. Существует пять видов параметров:492493- *позиционный или ключевой*: указывает аргумент, который может быть передан либо [позиционно](https://python-all.ru/3.7/glossary.html#term-argument), либо в качестве [ключевого аргумента](https://python-all.ru/3.7/glossary.html#term-argument). Это вид параметра по умолчанию, например *foo* и *bar* в следующем примере:494495 ```python496 def func(foo, bar=None): ...497 ```498499- *позиционно-только*: указывает аргумент, который может быть передан только по позиции. В Python нет синтаксиса для определения позиционно-только параметров. Однако некоторые встроенные функции имеют позиционно-только параметры (например, [`abs()`](https://python-all.ru/3.7/library/functions.html#abs)).500501- *только ключевой*: указывает аргумент, который может быть передан только по ключевому слову. Параметры только по ключевым словам можно определить, включив один вариативно-позиционный параметр или просто `*` в список параметров определения функции перед ними, например *kw\_only1* и *kw\_only2* в следующем примере:502503 ```python504 def func(arg, *, kw_only1, kw_only2): ...505 ```506- *вариативно-позиционный*: указывает, что может быть предоставлена произвольная последовательность позиционных аргументов (в дополнение к любым позиционным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `*` перед именем параметра, например *args* в следующем примере:507508 ```python509 def func(*args, **kwargs): ...510 ```511- *вариативно-ключевой*: указывает, что может быть предоставлено произвольно много именованных аргументов (в дополнение к любым именованным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `**` перед именем параметра, например *kwargs* в примере выше.512513Параметры могут определять как необязательные, так и обязательные аргументы, а также значения по умолчанию для некоторых необязательных аргументов.514515См. также статью глоссария [аргумент](https://python-all.ru/3.7/glossary.html#term-argument), вопрос из FAQ о [разнице между аргументами и параметрами](https://python-all.ru/3.7/faq/programming.html#faq-argument-vs-parameter), класс [`inspect.Parameter`](https://python-all.ru/3.7/library/inspect.html#inspect.Parameter), раздел [Определения функций](https://python-all.ru/3.7/reference/compound_stmts.html#function) и [**PEP 362**](https://python-all.ru/3.7/glossary.html).516517**элемент пути**518519Отдельное расположение в [пути импорта](https://python-all.ru/3.7/glossary.html#term-import-path), которое [поисковик на основе пути](https://python-all.ru/3.7/glossary.html#term-path-based-finder) просматривает для поиска модулей для импорта.520521**искатель элементов пути**522523[Поисковик](https://python-all.ru/3.7/glossary.html#term-finder), возвращаемый вызываемым объектом из [`sys.path_hooks`](https://python-all.ru/3.7/library/sys.html#sys.path_hooks) (т.е. [перехватчиком элемента пути](https://python-all.ru/3.7/glossary.html#term-path-entry-hook)), который умеет находить модули по заданному [элементу пути](https://python-all.ru/3.7/glossary.html#term-path-entry).524525Методы, которые реализуют поисковики элементов пути, описаны в [`importlib.abc.PathEntryFinder`](https://python-all.ru/3.7/library/importlib.html#importlib.abc.PathEntryFinder).526527**перехватчик элемента пути**528529Вызываемый объект из списка `sys.path_hook`, который возвращает [поисковик элемента пути](https://python-all.ru/3.7/glossary.html#term-path-entry-finder), если он умеет находить модули на конкретном [элементе пути](https://python-all.ru/3.7/glossary.html#term-path-entry).530531**искатель на основе пути**532533Один из [поисковиков по мета-пути](https://python-all.ru/3.7/glossary.html#term-meta-path-finder) по умолчанию, который ищет модули в [пути импорта](https://python-all.ru/3.7/glossary.html#term-import-path).534535**объект, подобный пути**536537Объект, представляющий путь файловой системы. Объект, подобный пути, – это либо объект [`str`](https://python-all.ru/3.7/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes), представляющий путь, либо объект, реализующий протокол [`os.PathLike`](https://python-all.ru/3.7/library/os.html#os.PathLike). Объект, поддерживающий протокол [`os.PathLike`](https://python-all.ru/3.7/library/os.html#os.PathLike), может быть преобразован в путь файловой системы [`str`](https://python-all.ru/3.7/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) вызовом функции [`os.fspath()`](https://python-all.ru/3.7/library/os.html#os.fspath); [`os.fsdecode()`](https://python-all.ru/3.7/library/os.html#os.fsdecode) и [`os.fsencode()`](https://python-all.ru/3.7/library/os.html#os.fsencode) могут использоваться для гарантированного получения результата [`str`](https://python-all.ru/3.7/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) соответственно. Введено [**PEP 519**](https://python-all.ru/3.7/glossary.html).538539**PEP**540541Python Enhancement Proposal. PEP – это проектный документ, предоставляющий информацию сообществу Python или описывающий новую возможность для Python, его процессов или окружения. PEP должны содержать краткую техническую спецификацию и обоснование предлагаемых возможностей.542543PEP предназначены быть основным механизмом для предложения крупных новых возможностей, сбора мнений сообщества по какому-либо вопросу и документирования проектных решений, принятых в Python. Автор PEP отвечает за достижение консенсуса в сообществе и документирование особых мнений.544545См. [**PEP 1**](https://python-all.ru/3.7/glossary.html).546547**portion**548549Набор файлов в одном каталоге (возможно, хранящемся в zip-файле), которые входят в пакет пространства имён, как определено в [**PEP 420**](https://python-all.ru/3.7/glossary.html).550551**позиционный аргумент**552553См. [аргумент](https://python-all.ru/3.7/glossary.html#term-argument).554555**экспериментальный API**556557Временный API – это API, который намеренно исключён из гарантий обратной совместимости стандартной библиотеки. Хотя серьёзные изменения таких интерфейсов не ожидаются, пока они помечены как временные, возможны несовместимые с предыдущими версиями изменения (вплоть до удаления интерфейса), если основные разработчики сочтут это необходимым. Такие изменения не будут вноситься без веской причины – они произойдут только в случае обнаружения серьёзных фундаментальных недостатков, которые были упущены до включения API.558559Даже для временных API несовместимые с предыдущими версиями изменения рассматриваются как «крайняя мера» – по-прежнему будут предприниматься все попытки найти обратно совместимое решение для любых выявленных проблем.560561Этот процесс позволяет стандартной библиотеке продолжать развиваться со временем, не закрепляя проблемные проектные ошибки на длительные периоды времени. Подробнее см. [**PEP 411**](https://python-all.ru/3.7/glossary.html).562563**экспериментальный пакет**564565См. [временный API](https://python-all.ru/3.7/glossary.html#term-provisional-api).566567**Python 3000**568569Прозвище для линейки релизов Python 3.x (придуманное давно, когда выход версии 3 был чем-то из далёкого будущего). Также сокращённо называется «Py3k».570571**Pythonic**572573Идея или фрагмент кода, который строго следует наиболее распространённым идиомам языка Python, а не реализует код с использованием концепций, общих для других языков. Например, распространённая идиома в Python – цикл по всем элементам итерируемого объекта с помощью оператора [`for`](https://python-all.ru/3.7/reference/compound_stmts.html#for). Многие другие языки не имеют такой конструкции, поэтому люди, незнакомые с Python, иногда используют вместо этого числовой счётчик:574575```python576for i in range(len(food)):577 print(food[i])578```579580В отличие от более чистого, питоничного метода:581582```python583for piece in food:584 print(piece)585```586587**полное имя**588589Точечное имя, показывающее «путь» от глобальной области видимости модуля к классу, функции или методу, определённым в этом модуле, как определено в [**PEP 3155**](https://python-all.ru/3.7/glossary.html). Для функций и классов верхнего уровня квалифицированное имя совпадает с именем объекта:590591```python592>>> class C:593... class D:594... def meth(self):595... pass596...597>>> C.__qualname__598'C'599>>> C.D.__qualname__600'C.D'601>>> C.D.meth.__qualname__602'C.D.meth'603```604605При использовании для ссылки на модули *полностью квалифицированное имя* означает полный точечный путь к модулю, включая любые родительские пакеты, например `email.mime.text`:606607```python608>>> import email.mime.text609>>> email.mime.text.__name__610'email.mime.text'611```612613**счётчик ссылок**614615Количество ссылок на объект. Когда счётчик ссылок объекта падает до нуля, объект освобождается. Подсчёт ссылок обычно невидим для кода Python, но является ключевым элементом реализации [CPython](https://python-all.ru/3.7/glossary.html#term-cpython). Модуль [`sys`](https://python-all.ru/3.7/library/sys.html#module-sys) определяет функцию [`getrefcount()`](https://python-all.ru/3.7/library/sys.html#sys.getrefcount), которую программисты могут вызывать для получения счётчика ссылок для конкретного объекта.616617**обычный пакет**618619Традиционный [пакет](https://python-all.ru/3.7/glossary.html#term-package), например каталог, содержащий файл `__init__.py`.620621См. также [пространство имён пакета](https://python-all.ru/3.7/glossary.html#term-namespace-package).622623**slots**624625Объявление внутри класса, которое экономит память, заранее выделяя место для атрибутов экземпляра и устраняя словари экземпляров. Хотя этот метод популярен, его правильное применение требует некоторой аккуратности, и его лучше использовать только в редких случаях, когда в приложении с критичной памятью создаётся большое количество экземпляров.626627**последовательность**628629[Итерируемый объект](https://python-all.ru/3.7/glossary.html#term-iterable), который поддерживает эффективный доступ к элементам по целочисленным индексам через специальный метод [`__getitem__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__getitem__) и определяет метод [`__len__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__len__), возвращающий длину последовательности. Некоторые встроенные типы последовательностей: [`list`](https://python-all.ru/3.7/library/stdtypes.html#list), [`str`](https://python-all.ru/3.7/library/stdtypes.html#str), [`tuple`](https://python-all.ru/3.7/library/stdtypes.html#tuple) и [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes). Обратите внимание, что [`dict`](https://python-all.ru/3.7/library/stdtypes.html#dict) также поддерживает [`__getitem__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__getitem__) и [`__len__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__len__), но считается отображением, а не последовательностью, так как поиск использует произвольные [неизменяемые](https://python-all.ru/3.7/glossary.html#term-immutable) ключи, а не целые числа.630631Абстрактный базовый класс [`collections.abc.Sequence`](https://python-all.ru/3.7/library/collections.abc.html#collections.abc.Sequence) определяет гораздо более богатый интерфейс, выходящий за рамки простых [`__getitem__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__getitem__) и [`__len__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__len__), добавляя `count()`, `index()`, [`__contains__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__contains__) и [`__reversed__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__reversed__). Типы, реализующие этот расширенный интерфейс, могут быть явно зарегистрированы с помощью `register()`.632633**одиночная диспетчеризация**634635A form of [generic function](https://python-all.ru/3.7/glossary.html#term-generic-function) dispatch where the implementation is chosen based on the type of a single argument.636637**срез**638639Объект, обычно содержащий часть [последовательности](https://python-all.ru/3.7/glossary.html#term-sequence). Срез создается с помощью индексации, `[]` с двоеточиями между числами, когда указано несколько, как в `variable_name[1:3:5]`. Квадратные скобки (индексация) внутри используют объекты [`slice`](https://python-all.ru/3.7/library/functions.html#slice).640641**специальный метод**642643A method that is called implicitly by Python to execute a certain operation on a type, such as addition. Such methods have names starting and ending with double underscores. Special methods are documented in [Special method names](https://python-all.ru/3.7/reference/datamodel.html#specialnames).644645**инструкция**646647A statement is part of a suite (a “block” of code). A statement is either an [expression](https://python-all.ru/3.7/glossary.html#term-expression) or one of several constructs with a keyword, such as [`if`](https://python-all.ru/3.7/reference/compound_stmts.html#if), [`while`](https://python-all.ru/3.7/reference/compound_stmts.html#while) or [`for`](https://python-all.ru/3.7/reference/compound_stmts.html#for).648649**кодировка текста**650651Кодек, который кодирует строки Unicode в байты.652653**текстовый файл**654655[Объект файла](https://python-all.ru/3.7/glossary.html#term-file-object), способный читать и записывать объекты [`str`](https://python-all.ru/3.7/library/stdtypes.html#str). Часто текстовый файл на самом деле обращается к байт-ориентированному потоку данных и автоматически обрабатывает [кодировку текста](https://python-all.ru/3.7/glossary.html#term-text-encoding). Примеры текстовых файлов: файлы, открытые в текстовом режиме (`'r'` или `'w'`), [`sys.stdin`](https://python-all.ru/3.7/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.7/library/sys.html#sys.stdout) и экземпляры [`io.StringIO`](https://python-all.ru/3.7/library/io.html#io.StringIO).656657См. также [двоичный файл](https://python-all.ru/3.7/glossary.html#term-binary-file) для объекта файла, способного читать и записывать [байтоподобные объекты](https://python-all.ru/3.7/glossary.html#term-bytes-like-object).658659**строка в тройных кавычках**660661Строка, ограниченная тремя экземплярами кавычек (”) или апострофов (‘). Хотя они не предоставляют никакой функциональности, недоступной в строках с одинарными кавычками, они полезны по ряду причин. Они позволяют включать неэкранированные одинарные и двойные кавычки внутри строки и могут занимать несколько строк без использования символа продолжения, что делает их особенно полезными при написании докстрингов.662663**тип**664665Тип объекта Python определяет, что это за объект; каждый объект имеет тип. Тип объекта доступен как его атрибут [`__class__`](https://python-all.ru/3.7/library/stdtypes.html#instance.__class__) или может быть получен с помощью `type(obj)`.666667**псевдоним типа**668669Синоним для типа, создаваемый присваиванием типа идентификатору.670671Псевдонимы типов полезны для упрощения [аннотаций типов](https://python-all.ru/3.7/glossary.html#term-type-hint). Например:672673```python674from typing import List, Tuple675676def remove_gray_shades(677 colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]:678 pass679```680681можно сделать более читаемым следующим образом:682683```python684from typing import List, Tuple685686Color = Tuple[int, int, int]687688def remove_gray_shades(colors: List[Color]) -> List[Color]:689 pass690```691692См. [`typing`](https://python-all.ru/3.7/library/typing.html#module-typing) и [**PEP 484**](https://python-all.ru/3.7/glossary.html), в которых описывается эта функциональность.693694**подсказка типа**695696[Аннотация](https://python-all.ru/3.7/glossary.html#term-annotation), которая указывает ожидаемый тип для переменной, атрибута класса или параметра функции или возвращаемого значения.697698Подсказки типов необязательны и не принудительно исполняются Python, но они полезны для инструментов статического анализа типов, а также помогают IDE с автодополнением и рефакторингом.699700Подсказки типа глобальных переменных, атрибутов классов и функций, но не локальных переменных, можно получить с помощью [`typing.get_type_hints()`](https://python-all.ru/3.7/library/typing.html#typing.get_type_hints).701702См. [`typing`](https://python-all.ru/3.7/library/typing.html#module-typing) и [**PEP 484**](https://python-all.ru/3.7/glossary.html), в которых описывается эта функциональность.703704**универсальные символы новой строки**705706Способ интерпретации текстовых потоков, при котором все следующие символы распознаются как конец строки: соглашение Unix о конце строки `'\n'`, соглашение Windows `'\r\n'` и старое соглашение Macintosh `'\r'`. См. [**PEP 278**](https://python-all.ru/3.7/glossary.html) и [**PEP 3116**](https://python-all.ru/3.7/glossary.html), а также [`bytes.splitlines()`](https://python-all.ru/3.7/library/stdtypes.html#bytes.splitlines) для дополнительного применения.707708**аннотация переменной**709710[Аннотация](https://python-all.ru/3.7/glossary.html#term-annotation) переменной или атрибута класса.711712При аннотировании переменной или атрибута класса присваивание необязательно:713714```python715class C:716 field: 'annotation'717```718719Аннотации переменных обычно используются для [подсказок типа](https://python-all.ru/3.7/glossary.html#term-type-hint): например, эта переменная должна принимать значения [`int`](https://python-all.ru/3.7/library/functions.html#int):720721```python722count: int = 0723```724725Синтаксис аннотаций переменных описан в разделе [Аннотированные операторы присваивания](https://python-all.ru/3.7/reference/simple_stmts.html#annassign).726727См. [аннотации функций](https://python-all.ru/3.7/glossary.html#term-function-annotation), [**PEP 484**](https://python-all.ru/3.7/glossary.html) и [**PEP 526**](https://python-all.ru/3.7/glossary.html), в которых описывается эта функциональность.728729**виртуальное окружение**730731Кооперативно изолированная среда выполнения, которая позволяет пользователям Python и приложениям устанавливать и обновлять пакеты распространения Python, не влияя на поведение других приложений Python, запущенных в той же системе.732733См. также [`venv`](https://python-all.ru/3.7/library/venv.html#module-venv).734735**виртуальная машина**736737Компьютер, полностью определённый в программном обеспечении. Виртуальная машина Python выполняет [байт-код](https://python-all.ru/3.7/glossary.html#term-bytecode), генерируемый компилятором байт-кода.738739**Дзен Python**740741Перечень принципов проектирования и философии Python, полезных для понимания и использования языка. Этот перечень можно найти, введя “`import this`” в интерактивном приглашении.742