glossary.md
1> **Источник:** https://python-all.ru/3.13/glossary.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Глоссарий89**`>>>`**1011Стандартное приглашение Python ввода в [интерактивной](https://python-all.ru/3.13/glossary.html#term-interactive) оболочке. Часто встречается в примерах кода, которые можно выполнять интерактивно в интерпретаторе.1213**`...`**1415Может относиться к:1617- Стандартное приглашение Python ввода в [интерактивной](https://python-all.ru/3.13/glossary.html#term-interactive) оболочке при вводе кода для блока с отступом, при нахождении внутри пары соответствующих левого и правого разделителей (круглых скобок, квадратных скобок, фигурных скобок или тройных кавычек), или после указания декоратора.1819- Форма из трёх точек объекта [Ellipsis](https://python-all.ru/3.13/library/stdtypes.html#bltin-ellipsis-object).2021**абстрактный базовый класс**2223Абстрактные базовые классы дополняют [утиную типизацию](https://python-all.ru/3.13/glossary.html#term-duck-typing), предоставляя способ определения интерфейсов, когда другие подходы, такие как [`hasattr()`](https://python-all.ru/3.13/library/functions.html#hasattr), были бы неуклюжими или вводили бы в заблуждение (например, с [магическими методами](https://python-all.ru/3.13/reference/datamodel.html#special-lookup)). ABC вводят виртуальные подклассы – классы, которые не наследуются от данного класса, но всё равно распознаются функциями [`isinstance()`](https://python-all.ru/3.13/library/functions.html#isinstance) и [`issubclass()`](https://python-all.ru/3.13/library/functions.html#issubclass); см. документацию модуля [`abc`](https://python-all.ru/3.13/library/abc.html#module-abc). Python поставляется со многими встроенными ABC для структур данных (в модуле [`collections.abc`](https://python-all.ru/3.13/library/collections.abc.html#module-collections.abc)), чисел (в модуле [`numbers`](https://python-all.ru/3.13/library/numbers.html#module-numbers)), потоков (в модуле [`io`](https://python-all.ru/3.13/library/io.html#module-io)), искателей и загрузчиков импорта (в модуле [`importlib.abc`](https://python-all.ru/3.13/library/importlib.html#module-importlib.abc)). Можно создавать собственные ABC с помощью модуля `abc`.2425**аннотация**2627Метка, связанная с переменной, атрибутом класса, параметром функции или возвращаемым значением, используемая по соглашению как [подсказка типа](https://python-all.ru/3.13/glossary.html#term-type-hint).2829Аннотации локальных переменных недоступны во время выполнения, но аннотации глобальных переменных, атрибутов класса и функций хранятся в `__annotations__` специальном атрибуте модулей, классов и функций соответственно.3031См. [аннотацию переменной](https://python-all.ru/3.13/glossary.html#term-variable-annotation), [аннотацию функции](https://python-all.ru/3.13/glossary.html#term-function-annotation), [**PEP 484**](https://python-all.ru/3.13/glossary.html) и [**PEP 526**](https://python-all.ru/3.13/glossary.html), которые описывают эту функциональность. Также см. [Рекомендации по работе с аннотациями](https://python-all.ru/3.13/howto/annotations.html#annotations-howto) для получения лучших практик работы с аннотациями.3233**аргумент**3435Значение, передаваемое [функции](https://python-all.ru/3.13/glossary.html#term-function) (или [методу](https://python-all.ru/3.13/glossary.html#term-method)) при вызове функции. Существует два вида аргументов:3637- *именованный аргумент*: аргумент, перед которым стоит идентификатор (например, `name=`) в вызове функции или переданный как значение в словаре перед `**`. Например, `3` и `5` оба являются именованными аргументами в следующих вызовах [`complex()`](https://python-all.ru/3.13/library/functions.html#complex):3839 ```python40 complex(real=3, imag=5)41 complex(**{'real': 3, 'imag': 5})42 ```43- *позиционный аргумент*: аргумент, не являющийся именованным. Позиционные аргументы могут находиться в начале списка аргументов и/или передаваться как элементы [итерируемого объекта](https://python-all.ru/3.13/glossary.html#term-iterable) перед `*`. Например, `3` и `5` оба являются позиционными аргументами в следующих вызовах:4445 ```python46 complex(3, 5)47 complex(*(3, 5))48 ```4950Аргументы присваиваются именованным локальным переменным в теле функции. См. раздел [Вызовы](https://python-all.ru/3.13/reference/expressions.html#calls) для правил, регулирующих это присваивание. Синтаксически для представления аргумента можно использовать любое выражение; вычисленное значение присваивается локальной переменной.5152См. также запись глоссария [параметр](https://python-all.ru/3.13/glossary.html#term-parameter), вопрос FAQ о [различии между аргументами и параметрами](https://python-all.ru/3.13/faq/programming.html#faq-argument-vs-parameter), и [**PEP 362**](https://python-all.ru/3.13/glossary.html).5354**асинхронный менеджер контекста**5556Объект, управляющий окружением в операторе [`async with`](https://python-all.ru/3.13/reference/compound_stmts.html#async-with) путём определения методов [`__aenter__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__aenter__) и [`__aexit__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__aexit__). Введён в [**PEP 492**](https://python-all.ru/3.13/glossary.html).5758**асинхронный генератор**5960Неформально используется для обозначения как [асинхронной генераторной функции](https://python-all.ru/3.13/glossary.html#term-asynchronous-generator-function), так и [итератора асинхронного генератора](https://python-all.ru/3.13/glossary.html#term-asynchronous-generator-iterator), в зависимости от контекста. Формальные термины асинхронная генераторная функция и итератор асинхронного генератора на практике редко используются; «асинхронный генератор» почти всегда достаточно.6162**асинхронная генераторная функция**6364Функция, возвращающая [итератор асинхронного генератора](https://python-all.ru/3.13/glossary.html#term-asynchronous-generator-iterator). Она похожа на корутинную функцию, определённую с [`async def`](https://python-all.ru/3.13/reference/compound_stmts.html#async-def), за исключением того, что содержит выражения [`yield`](https://python-all.ru/3.13/reference/simple_stmts.html#yield) для получения последовательности значений, используемых в цикле [`async for`](https://python-all.ru/3.13/reference/compound_stmts.html#async-for). См. [**PEP 525**](https://python-all.ru/3.13/glossary.html).6566Асинхронная генераторная функция может содержать выражения [`await`](https://python-all.ru/3.13/reference/expressions.html#await), а также [`async for`](https://python-all.ru/3.13/reference/compound_stmts.html#async-for) и операторы [`async with`](https://python-all.ru/3.13/reference/compound_stmts.html#async-with).6768**итератор асинхронного генератора**6970Объект, создаваемый [асинхронной генераторной функцией](https://python-all.ru/3.13/glossary.html#term-asynchronous-generator-function).7172Это [асинхронный итератор](https://python-all.ru/3.13/glossary.html#term-asynchronous-iterator), который при вызове метода [`__anext__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__anext__) возвращает ожидаемый объект, выполняющий тело асинхронной генераторной функции до следующего выражения [`yield`](https://python-all.ru/3.13/reference/simple_stmts.html#yield).7374Каждое [`yield`](https://python-all.ru/3.13/reference/simple_stmts.html#yield) временно приостанавливает обработку, запоминая состояние выполнения (включая локальные переменные и ожидающие try-конструкции). Когда *итератор асинхронного генератора* эффективно возобновляется с другим ожидаемым объектом, возвращаемым [`__anext__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__anext__), он продолжает с того места, где остановился. См. [**PEP 492**](https://python-all.ru/3.13/glossary.html) и [**PEP 525**](https://python-all.ru/3.13/glossary.html).7576**асинхронный итерируемый объект**7778Объект, который можно использовать в операторе [`async for`](https://python-all.ru/3.13/reference/compound_stmts.html#async-for). Из своего метода [`__aiter__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__aiter__) должен возвращать [асинхронный итератор](https://python-all.ru/3.13/glossary.html#term-asynchronous-iterator). Введён [**PEP 492**](https://python-all.ru/3.13/glossary.html).7980**асинхронный итератор**8182Объект, реализующий методы [`__aiter__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__aiter__) и [`__anext__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__anext__). Метод `__anext__()` должен возвращать [ожидаемый объект](https://python-all.ru/3.13/glossary.html#term-awaitable). [`async for`](https://python-all.ru/3.13/reference/compound_stmts.html#async-for) разрешает ожидаемые объекты, возвращаемые методом `__anext__()` асинхронного итератора, пока не возникнет исключение [`StopAsyncIteration`](https://python-all.ru/3.13/library/exceptions.html#StopAsyncIteration). Введён [**PEP 492**](https://python-all.ru/3.13/glossary.html).8384**атомарная операция**8586Операция, которая выполняется как единый неделимый шаг: ни один другой поток не может наблюдать её в незавершённом виде, а все её эффекты становятся видны сразу. Python не гарантирует атомарность высокоуровневых операторов (например, `x += 1` выполняет несколько байткод-инструкций и не является атомарным). Атомарность гарантируется только там, где это явно указано. См. также [состояние гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) и [гонка данных](https://python-all.ru/3.13/glossary.html#term-data-race).8788**атрибут**8990Значение, связанное с объектом, которое обычно обозначается именем через точечную запись. Например, если объект *o* имеет атрибут *a*, к нему обращаются как *o.a*.9192Можно назначить объекту атрибут, имя которого не является идентификатором, как определено в [Идентификаторах и ключевых словах](https://python-all.ru/3.13/reference/lexical_analysis.html#identifiers), например используя [`setattr()`](https://python-all.ru/3.13/library/functions.html#setattr), если объект это позволяет. Такой атрибут не будет доступен через точечное выражение, и вместо этого его нужно будет получить с помощью [`getattr()`](https://python-all.ru/3.13/library/functions.html#getattr).9394**ожидаемый объект**9596Объект, который можно использовать в выражении [`await`](https://python-all.ru/3.13/reference/expressions.html#await). Это может быть [корутина](https://python-all.ru/3.13/glossary.html#term-coroutine) или объект с методом [`__await__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__await__). См. также [**PEP 492**](https://python-all.ru/3.13/glossary.html).9798**BDFL**99100Доброжелательный диктатор на всю жизнь, также известный как [Гвидо ван Россум](https://python-all.ru/3.13/glossary.html), создатель Python.101102**двоичный файл**103104[Файловый объект](https://python-all.ru/3.13/glossary.html#term-file-object), который может читать и записывать [байтоподобные объекты](https://python-all.ru/3.13/glossary.html#term-bytes-like-object). Примерами двоичных файлов являются файлы, открытые в двоичном режиме (`'rb'`, `'wb'` или `'rb+'`), [`sys.stdin.buffer`](https://python-all.ru/3.13/library/sys.html#sys.stdin), [`sys.stdout.buffer`](https://python-all.ru/3.13/library/sys.html#sys.stdout), а также экземпляры [`io.BytesIO`](https://python-all.ru/3.13/library/io.html#io.BytesIO) и [`gzip.GzipFile`](https://python-all.ru/3.13/library/gzip.html#gzip.GzipFile).105106См. также [текстовый файл](https://python-all.ru/3.13/glossary.html#term-text-file) – файловый объект, который может читать и записывать объекты [`str`](https://python-all.ru/3.13/library/stdtypes.html#str).107108**заимствованная ссылка**109110В C API Python заимствованная ссылка – это ссылка на объект, при которой использующий объект код не владеет ссылкой. Она становится висячим указателем, если объект уничтожен. Например, сборка мусора может удалить последнюю [сильную ссылку](https://python-all.ru/3.13/glossary.html#term-strong-reference) на объект и тем самым уничтожить его.111112Рекомендуется вызывать [`Py_INCREF()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_INCREF) для [заимствованной ссылки](https://python-all.ru/3.13/glossary.html#term-borrowed-reference), чтобы преобразовать её в [сильную ссылку](https://python-all.ru/3.13/glossary.html#term-strong-reference) на месте, за исключением случаев, когда объект не может быть уничтожен до последнего использования заимствованной ссылки. Функция [`Py_NewRef()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_NewRef) позволяет создать новую сильную ссылку.113114**байтоподобный объект**115116Объект, поддерживающий [протокол буфера](https://python-all.ru/3.13/c-api/buffer.html#bufferobjects) и способный экспортировать C-[непрерывный](https://python-all.ru/3.13/glossary.html#term-contiguous) буфер. Сюда входят все объекты [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes), [`bytearray`](https://python-all.ru/3.13/library/stdtypes.html#bytearray) и [`array.array`](https://python-all.ru/3.13/library/array.html#array.array), а также многие распространённые объекты [`memoryview`](https://python-all.ru/3.13/library/stdtypes.html#memoryview). Байтоподобные объекты могут использоваться в различных операциях с двоичными данными: сжатие, сохранение в двоичный файл, отправка через сокет.117118Некоторым операциям требуются изменяемые двоичные данные. В документации они часто называются «байтоподобные объекты для чтения и записи». Примерами изменяемых буферных объектов являются [`bytearray`](https://python-all.ru/3.13/library/stdtypes.html#bytearray) и [`memoryview`](https://python-all.ru/3.13/library/stdtypes.html#memoryview) объекта `bytearray`. Другие операции требуют хранения двоичных данных в неизменяемых объектах («байтоподобные объекты только для чтения»); примеры включают [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes) и `memoryview` объекта `bytes`.119120**байткод**121122Исходный код Python компилируется в байткод – внутреннее представление программы Python в интерпретаторе CPython. Байткод также кэшируется в файлах `.pyc`, чтобы при повторном выполнении того же файла работа происходила быстрее (повторная компиляция из исходного кода в байткод не требуется). Этот «промежуточный язык», как говорят, выполняется на [виртуальной машине](https://python-all.ru/3.13/glossary.html#term-virtual-machine), которая исполняет машинный код, соответствующий каждому байткоду. Следует отметить, что байткоды не должны работать в разных виртуальных машинах Python и не обязаны быть стабильными между версиями Python.123124Список инструкций байткода можно найти в документации [модуля dis](https://python-all.ru/3.13/library/dis.html#bytecodes).125126**вызываемый объект**127128Вызываемый объект – это объект, который можно вызвать, возможно с набором аргументов (см. [аргумент](https://python-all.ru/3.13/glossary.html#term-argument)), с помощью следующего синтаксиса:129130```python131callable(argument1, argument2, argumentN)132```133134[Функция](https://python-all.ru/3.13/glossary.html#term-function), а по расширению и [метод](https://python-all.ru/3.13/glossary.html#term-method), является вызываемым объектом. Экземпляр класса, реализующего метод [`__call__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__call__), также является вызываемым объектом.135136**колбэк**137138Функция-подпрограмма, передаваемая в качестве аргумента для выполнения в некоторый момент в будущем.139140**класс**141142Шаблон для создания пользовательских объектов. Определения классов обычно содержат определения методов, которые работают с экземплярами класса.143144**переменная класса**145146Переменная, определенная в классе и предназначенная для изменения только на уровне класса (т.е. не в экземпляре класса).147148**переменная замыкания**149150Свободная переменная [свободная переменная](https://python-all.ru/3.13/glossary.html#term-free-variable), на которую ссылаются из [вложенной области видимости](https://python-all.ru/3.13/glossary.html#term-nested-scope), определенной во внешней области видимости, а не разрешаемой во время выполнения из глобальных или встроенных пространств имен. Может быть явно определена с помощью ключевого слова [`nonlocal`](https://python-all.ru/3.13/reference/simple_stmts.html#nonlocal) для разрешения записи или неявно определена, если переменная только читается.151152Например, в функции `inner` в следующем коде обе `x` и `print` являются [свободными переменными](https://python-all.ru/3.13/glossary.html#term-free-variable), но только `x` является *переменной замыкания*:153154```python155def outer():156 x = 0157 def inner():158 nonlocal x159 x += 1160 print(x)161 return inner162```163164Из-за атрибута [`codeobject.co_freevars`](https://python-all.ru/3.13/reference/datamodel.html#codeobject.co_freevars) (который, несмотря на свое название, только включает имена переменных замыкания, а не перечисляет все ссылочные свободные переменные), более общий термин [свободная переменная](https://python-all.ru/3.13/glossary.html#term-free-variable) иногда используется даже когда подразумеваются именно переменные замыкания.165166**комплексное число**167168Расширение привычной системы действительных чисел, в котором все числа выражаются как сумма действительной и мнимой частей. Мнимые числа – это действительные кратные мнимой единицы (квадратный корень из `-1`), часто обозначаемой `i` в математике или `j` в инженерии. Python имеет встроенную поддержку комплексных чисел, которые записываются в этой последней нотации; мнимая часть записывается с суффиксом `j`, например, `3+1j`. Чтобы получить доступ к комплексным аналогам модуля [`math`](https://python-all.ru/3.13/library/math.html#module-math), используйте [`cmath`](https://python-all.ru/3.13/library/cmath.html#module-cmath). Использование комплексных чисел – довольно продвинутая математическая возможность. Если нет очевидной необходимости в них, их почти наверняка можно безопасно игнорировать.169170**конкурентность**171172Способность компьютерной программы выполнять несколько задач одновременно. Python предоставляет библиотеки для написания программ, использующих различные формы конкурентности. [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) – это библиотека для работы с асинхронными задачами и корутинами. [`threading`](https://python-all.ru/3.13/library/threading.html#module-threading) предоставляет доступ к потокам операционной системы, а [`multiprocessing`](https://python-all.ru/3.13/library/multiprocessing.html#module-multiprocessing) – к процессам операционной системы. Многоядерные процессоры могут выполнять потоки и процессы на разных ядрах CPU одновременно (см. [параллелизм](https://python-all.ru/3.13/glossary.html#term-parallelism)).173174**конкурентное изменение**175176Когда несколько потоков одновременно изменяют общие данные. Конкурентное изменение без надлежащей синхронизации может вызывать [состояния гонки](https://python-all.ru/3.13/glossary.html#term-race-condition), а также может спровоцировать [гонку данных](https://python-all.ru/3.13/glossary.html#term-data-race), повреждение данных или и то, и другое.177178**контекст**179180Этот термин имеет разные значения в зависимости от того, где и как используется. Некоторые распространенные значения:181182- Временное состояние или окружение, создаваемое [менеджером контекста](https://python-all.ru/3.13/glossary.html#term-context-manager) с помощью оператора [`with`](https://python-all.ru/3.13/reference/compound_stmts.html#with).183- Набор привязок ключ-значение, связанный с конкретным объектом [`contextvars.Context`](https://python-all.ru/3.13/library/contextvars.html#contextvars.Context) и доступный через объекты [`ContextVar`](https://python-all.ru/3.13/library/contextvars.html#contextvars.ContextVar). Также см. [контекстная переменная](https://python-all.ru/3.13/glossary.html#term-context-variable).184- Объект [`contextvars.Context`](https://python-all.ru/3.13/library/contextvars.html#contextvars.Context). Также см. [текущий контекст](https://python-all.ru/3.13/glossary.html#term-current-context).185186**протокол управления контекстом**187188Методы [`__enter__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__exit__), вызываемые оператором [`with`](https://python-all.ru/3.13/reference/compound_stmts.html#with). См. [**PEP 343**](https://python-all.ru/3.13/glossary.html).189190**менеджер контекста**191192Объект, реализующий [протокол управления контекстом](https://python-all.ru/3.13/glossary.html#term-context-management-protocol) и управляющий окружением, видимым в операторе [`with`](https://python-all.ru/3.13/reference/compound_stmts.html#with). См. [**PEP 343**](https://python-all.ru/3.13/glossary.html).193194**контекстная переменная**195196Переменная, значение которой зависит от того, какой контекст является [текущим контекстом](https://python-all.ru/3.13/glossary.html#term-current-context). Значения доступны через объекты [`contextvars.ContextVar`](https://python-all.ru/3.13/library/contextvars.html#contextvars.ContextVar). Контекстные переменные в основном используются для изоляции состояния между конкурентными асинхронными задачами.197198**непрерывный**199200Буфер считается непрерывным, если он является либо *C-непрерывным*, либо *непрерывным по Фортрану*. Нулевые буферы являются C- и Fortran-непрерывными. В одномерных массивах элементы должны располагаться в памяти рядом друг с другом, в порядке возрастания индексов, начиная с нуля. В многомерных C-непрерывных массивах последний индекс меняется быстрее всего при обходе элементов в порядке адресов памяти. Однако в массивах, непрерывных по Фортрану, первым меняется первый индекс.201202**корутина**203204Корутины – это более обобщенная форма подпрограмм. Подпрограммы вызываются в одной точке и завершаются в другой. Корутины могут вызываться, приостанавливаться и возобновляться во многих разных точках. Они могут быть реализованы с помощью оператора [`async def`](https://python-all.ru/3.13/reference/compound_stmts.html#async-def). См. также [**PEP 492**](https://python-all.ru/3.13/glossary.html).205206**корутинная функция**207208Функция, возвращающая объект [корутина](https://python-all.ru/3.13/glossary.html#term-coroutine). Корутинная функция может быть определена с помощью оператора [`async def`](https://python-all.ru/3.13/reference/compound_stmts.html#async-def) и может содержать ключевые слова [`await`](https://python-all.ru/3.13/reference/expressions.html#await), [`async for`](https://python-all.ru/3.13/reference/compound_stmts.html#async-for) и [`async with`](https://python-all.ru/3.13/reference/compound_stmts.html#async-with). Они были введены в [**PEP 492**](https://python-all.ru/3.13/glossary.html).209210**CPython**211212Каноническая реализация языка программирования Python, распространяемая на [python.org](https://python-all.ru/3.13/glossary.html). Термин «CPython» используется, когда необходимо отличить эту реализацию от других, таких как Jython или IronPython.213214**текущий контекст**215216[Контекст](https://python-all.ru/3.13/glossary.html#term-context) (объект [`contextvars.Context`](https://python-all.ru/3.13/library/contextvars.html#contextvars.Context)), который в данный момент используется объектами [`ContextVar`](https://python-all.ru/3.13/library/contextvars.html#contextvars.ContextVar) для доступа (чтения или записи) к значениям [переменных контекста](https://python-all.ru/3.13/glossary.html#term-context-variable). Каждый поток имеет свой собственный текущий контекст. Фреймворки для выполнения асинхронных задач (см. [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio)) связывают каждую задачу с контекстом, который становится текущим контекстом при каждом запуске или возобновлении задачи.217218**гонка данных**219220Ситуация, когда несколько потоков одновременно обращаются к одной и той же ячейке памяти, причём хотя бы одно обращение – запись, и потоки не используют никакой синхронизации для управления доступом. Гонки данных приводят к [недетерминированному](https://python-all.ru/3.13/glossary.html#term-non-deterministic) поведению и могут вызывать повреждение данных. Правильное использование [блокировок](https://python-all.ru/3.13/glossary.html#term-lock) и других [примитивов синхронизации](https://python-all.ru/3.13/glossary.html#term-synchronization-primitive) предотвращает гонки данных. Обратите внимание, что гонки данных возможны только в нативном коде, но [нативный код](https://python-all.ru/3.13/glossary.html#term-native-code) может быть доступен через Python API. См. также [состояние гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) и [потокобезопасный](https://python-all.ru/3.13/glossary.html#term-thread-safe).221222**взаимная блокировка**223224Ситуация, в которой две или более задач (потоков, процессов или корутин) бесконечно ждут друг от друга освобождения ресурсов или завершения действий, не позволяя ни одной из них продвинуться. Например, если поток A удерживает блокировку 1 и ждёт блокировку 2, а поток B удерживает блокировку 2 и ждёт блокировку 1, оба потока будут ждать бесконечно. В Python это часто возникает из-за захвата нескольких блокировок в противоречивом порядке или из-за циклических зависимостей join/await. Взаимных блокировок можно избежать, всегда захватывая несколько [блокировок](https://python-all.ru/3.13/glossary.html#term-lock) в одном и том же порядке. См. также блокировка и [реентерабельный](https://python-all.ru/3.13/glossary.html#term-reentrant).225226**декоратор**227228Функция, возвращающая другую функцию, обычно применяется как преобразование функции с помощью синтаксиса `@wrapper`. Распространённые примеры декораторов: [`classmethod()`](https://python-all.ru/3.13/library/functions.html#classmethod) и [`staticmethod()`](https://python-all.ru/3.13/library/functions.html#staticmethod).229230Синтаксис декоратора – всего лишь синтаксический сахар, следующие два определения функций семантически эквивалентны:231232```python233def f(arg):234 ...235f = staticmethod(f)236237@staticmethod238def f(arg):239 ...240```241242Та же концепция существует и для классов, но там используется реже. См. документацию по [определениям функций](https://python-all.ru/3.13/reference/compound_stmts.html#function) и [определениям классов](https://python-all.ru/3.13/reference/compound_stmts.html#class) для получения дополнительной информации о декораторах.243244**дескриптор**245246Любой объект, который определяет методы [`__get__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__get__), [`__set__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__set__) или [`__delete__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__delete__). Когда атрибут класса является дескриптором, его особое поведение при связывании срабатывает при поиске атрибута. Обычно при использовании *a.b* для получения, установки или удаления атрибута ищется объект с именем *b* в словаре класса для *a*, но если *b* – дескриптор, вызывается соответствующий метод дескриптора. Понимание дескрипторов – ключ к глубокому пониманию Python, так как они лежат в основе многих возможностей, включая функции, методы, свойства, методы класса, статические методы и ссылки на суперклассы.247248Для получения дополнительной информации о методах дескрипторов см. [Implementing Descriptors](https://python-all.ru/3.13/reference/datamodel.html#descriptors) или [Descriptor How To Guide](https://python-all.ru/3.13/howto/descriptor.html#descriptorhowto).249250**словарь**251252Ассоциативный массив, в котором произвольные ключи сопоставляются со значениями. Ключами могут быть любые объекты с методами [`__hash__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__hash__) и [`__eq__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__eq__). В Perl называется хешем.253254**словарное включение**255256Компактный способ обработать все или часть элементов итерируемого объекта и вернуть словарь с результатами. `results = {n: n ** 2 for n in range(10)}` создает словарь, содержащий ключи `n`, сопоставленные со значениями `n ** 2`. См. [Отображения для списков, множеств и словарей](https://python-all.ru/3.13/reference/expressions.html#comprehensions).257258**представление словаря**259260Объекты, возвращаемые методами [`dict.keys()`](https://python-all.ru/3.13/library/stdtypes.html#dict.keys), [`dict.values()`](https://python-all.ru/3.13/library/stdtypes.html#dict.values) и [`dict.items()`](https://python-all.ru/3.13/library/stdtypes.html#dict.items), называются представлениями словаря. Они предоставляют динамическое представление записей словаря, то есть при изменении словаря представление отражает эти изменения. Чтобы преобразовать представление словаря в обычный список, используйте `list(dictview)`. См. [Объекты представлений словаря](https://python-all.ru/3.13/library/stdtypes.html#dict-views).261262**докстринг**263264Строковый литерал, который появляется как первое выражение в классе, функции или модуле. Хотя он игнорируется при выполнении кода внутри блока, компилятор распознаёт его и помещает в атрибут [`__doc__`](https://python-all.ru/3.13/library/stdtypes.html#definition.__doc__) содержащего класса, функции или модуля. Поскольку к нему можно получить доступ через интроспекцию, это каноническое место для документации объекта.265266**утиная типизация**267268Стиль программирования, который не проверяет тип объекта для определения, обладает ли он нужным интерфейсом; вместо этого метод или атрибут просто вызывается или используется («Если это выглядит как утка и крякает как утка, значит, это утка»). Делая упор на интерфейсы, а не на конкретные типы, хорошо спроектированный код повышает гибкость за счёт полиморфной замены. Утиная типизация избегает проверок с помощью [`type()`](https://python-all.ru/3.13/library/functions.html#type) или [`isinstance()`](https://python-all.ru/3.13/library/functions.html#isinstance). (Однако утиную типизацию можно дополнить [абстрактными базовыми классами](https://python-all.ru/3.13/glossary.html#term-abstract-base-class).) Вместо этого она обычно использует проверки [`hasattr()`](https://python-all.ru/3.13/library/functions.html#hasattr) или программирование в стиле [EAFP](https://python-all.ru/3.13/glossary.html#term-EAFP).269270**дандер**271272Неформальное сокращение от «двойное подчёркивание», используется при обсуждении [специального метода](https://python-all.ru/3.13/glossary.html#term-special-method). Например, `__init__` часто произносят как «дандер-инит».273274**EAFP**275276Легче попросить прощения, чем разрешения. Этот распространённый стиль программирования на Python предполагает наличие допустимых ключей или атрибутов и перехватывает исключения, если предположение оказывается неверным. Этот чистый и быстрый стиль характеризуется наличием множества операторов [`try`](https://python-all.ru/3.13/reference/compound_stmts.html#try) и [`except`](https://python-all.ru/3.13/reference/compound_stmts.html#except). Этот подход противопоставляется стилю [LBYL](https://python-all.ru/3.13/glossary.html#term-LBYL), распространённому во многих других языках, таких как C.277278**выражение**279280Фрагмент синтаксиса, который можно вычислить для получения некоторого значения. Иными словами, выражение – это совокупность элементов выражения, таких как литералы, имена, доступ к атрибутам, операторы или вызовы функций, которые возвращают значение. В отличие от многих других языков, не все языковые конструкции являются выражениями. Существуют также [оператор](https://python-all.ru/3.13/glossary.html#term-statement)ы, которые не могут использоваться как выражения, например [`while`](https://python-all.ru/3.13/reference/compound_stmts.html#while). Присваивания также являются операторами, а не выражениями.281282**модуль расширения**283284Модуль, написанный на C или C++, использующий C API Python для взаимодействия с ядром и пользовательским кодом.285286**f-строка**287288Строковые литералы с префиксом `'f'` или `'F'` обычно называются «f-строками», что является сокращением от [форматированных строковых литералов](https://python-all.ru/3.13/reference/lexical_analysis.html#f-strings). См. также [**PEP 498**](https://python-all.ru/3.13/glossary.html).289290**файловый объект**291292Объект, предоставляющий файловый API (с методами, такими как `read()` или `write()`) для нижележащего ресурса. В зависимости от способа создания, файловый объект может обеспечивать доступ к реальному файлу на диске или к другому типу хранилища или устройства связи (например, стандартный ввод/вывод, буферы в памяти, сокеты, каналы и т.д.). Файловые объекты также называются *объектами, подобными файлам* или *потоками данных*.293294На самом деле существует три категории файловых объектов: [необработанные двоичные файлы](https://python-all.ru/3.13/glossary.html#term-binary-file), буферизованные двоичные файлы и [текстовые файлы](https://python-all.ru/3.13/glossary.html#term-text-file). Их интерфейсы определены в модуле [`io`](https://python-all.ru/3.13/library/io.html#module-io). Канонический способ создания файлового объекта – использование функции [`open()`](https://python-all.ru/3.13/library/functions.html#open).295296**объект, подобный файлу**297298Синоним для [файлового объекта](https://python-all.ru/3.13/glossary.html#term-file-object).299300**кодировка файловой системы и обработчик ошибок**301302Кодировка и обработчик ошибок, используемые Python для декодирования байтов из операционной системы и кодирования Unicode в операционную систему.303304Кодировка файловой системы должна гарантировать успешное декодирование всех байтов ниже 128. Если кодировка файловой системы не обеспечивает эту гарантию, функции API могут вызывать [`UnicodeError`](https://python-all.ru/3.13/library/exceptions.html#UnicodeError).305306Функции [`sys.getfilesystemencoding()`](https://python-all.ru/3.13/library/sys.html#sys.getfilesystemencoding) и [`sys.getfilesystemencodeerrors()`](https://python-all.ru/3.13/library/sys.html#sys.getfilesystemencodeerrors) можно использовать для получения кодировки файловой системы и обработчика ошибок.307308[Кодировка файловой системы и обработчик ошибок](https://python-all.ru/3.13/glossary.html#term-filesystem-encoding-and-error-handler) настраиваются при запуске Python функцией [`PyConfig_Read()`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig_Read): см. члены [`filesystem_encoding`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.filesystem_encoding) и [`filesystem_errors`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.filesystem_errors) объекта [`PyConfig`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig).309310См. также [кодировку локали](https://python-all.ru/3.13/glossary.html#term-locale-encoding).311312**искатель**313314Объект, который пытается найти [загрузчик](https://python-all.ru/3.13/glossary.html#term-loader) для импортируемого модуля.315316Существует два типа искателей: [искатели метапути](https://python-all.ru/3.13/glossary.html#term-meta-path-finder) для использования с [`sys.meta_path`](https://python-all.ru/3.13/library/sys.html#sys.meta_path) и [искатели записей пути](https://python-all.ru/3.13/glossary.html#term-path-entry-finder) для использования с [`sys.path_hooks`](https://python-all.ru/3.13/library/sys.html#sys.path_hooks).317318См. [Искатели и загрузчики](https://python-all.ru/3.13/reference/import.html#finders-and-loaders) и [`importlib`](https://python-all.ru/3.13/library/importlib.html#module-importlib) для более подробной информации.319320**деление с округлением вниз**321322Математическое деление, округляющее результат до ближайшего целого вниз. Оператор деления с округлением вниз – `//`. Например, выражение `11 // 4` вычисляется в `2` в отличие от `2.75`, возвращаемого при истинном делении с плавающей запятой. Обратите внимание, что `(-11) // 4` равно `-3`, потому что это `-2.75`, округлённое *вниз*. См. [**PEP 238**](https://python-all.ru/3.13/glossary.html).323324**свободная многопоточность**325326Модель многопоточности, в которой несколько потоков могут одновременно выполнять байт-код Python в одном интерпретаторе. Это противоположно [глобальной блокировке интерпретатора](https://python-all.ru/3.13/glossary.html#term-global-interpreter-lock), которая позволяет только одному потоку выполнять байт-код за раз. См. [**PEP 703**](https://python-all.ru/3.13/glossary.html).327328**свободная переменная**329330Формально, как определено в [модели выполнения языка](https://python-all.ru/3.13/reference/executionmodel.html#bind-names), свободная переменная – это любая переменная, используемая в пространстве имен, которая не является локальной переменной в этом пространстве имен. См. пример в [переменной замыкания](https://python-all.ru/3.13/glossary.html#term-closure-variable). На практике, из-за названия атрибута [`codeobject.co_freevars`](https://python-all.ru/3.13/reference/datamodel.html#codeobject.co_freevars), этот термин также иногда используется как синоним переменной замыкания.331332**функция**333334Последовательность инструкций, которая возвращает некоторое значение вызывающему коду. В неё также можно передать ноль или более [аргументов](https://python-all.ru/3.13/glossary.html#term-argument), которые могут использоваться при выполнении тела. См. также [параметр](https://python-all.ru/3.13/glossary.html#term-parameter), [метод](https://python-all.ru/3.13/glossary.html#term-method), и раздел [Определения функций](https://python-all.ru/3.13/reference/compound_stmts.html#function).335336**аннотация функции**337338[Аннотация](https://python-all.ru/3.13/glossary.html#term-annotation) параметра функции или возвращаемого значения.339340Аннотации функций обычно используются для [подсказок типов](https://python-all.ru/3.13/glossary.html#term-type-hint): например, ожидается, что эта функция принимает два [`int`](https://python-all.ru/3.13/library/functions.html#int) аргумента, а также имеет `int` возвращаемое значение:341342```python343def sum_two_numbers(a: int, b: int) -> int:344 return a + b345```346347Синтаксис аннотаций функций описан в разделе [Определения функций](https://python-all.ru/3.13/reference/compound_stmts.html#function).348349См. [аннотацию переменной](https://python-all.ru/3.13/glossary.html#term-variable-annotation) и [**PEP 484**](https://python-all.ru/3.13/glossary.html), которые описывают эту функциональность. Также см. [Рекомендации по аннотациям](https://python-all.ru/3.13/howto/annotations.html#annotations-howto) для получения лучших практик работы с аннотациями.350351**\_\_future\_\_**352353[Future-инструкция](https://python-all.ru/3.13/reference/simple_stmts.html#future), `from __future__ import <feature>`, указывает компилятору компилировать текущий модуль, используя синтаксис или семантику, которая станет стандартной в будущем релизе Python. Модуль [`__future__`](https://python-all.ru/3.13/library/__future__.html#module-__future__) документирует возможные значения *свойства*. Импортируя этот модуль и вычисляя его переменные, можно увидеть, когда новая возможность была впервые добавлена в язык и когда она станет (или стала) значением по умолчанию:354355```python356>>> import __future__357>>> __future__.division358_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)359```360361**сборка мусора**362363Процесс освобождения памяти, когда она больше не используется. Python выполняет сборку мусора с помощью подсчёта ссылок и циклического сборщика мусора, который может обнаруживать и разрывать циклические ссылки. Сборщиком мусора можно управлять с помощью модуля [`gc`](https://python-all.ru/3.13/library/gc.html#module-gc).364365**генератор**366367Неформально используется для обозначения либо [функции-генератора](https://python-all.ru/3.13/glossary.html#term-generator-function), либо [итератора генератора](https://python-all.ru/3.13/glossary.html#term-generator-iterator), в зависимости от контекста. Формальные термины функция-генератор и итератор генератора на практике встречаются редко; «генератор» почти всегда достаточен.368369**функция-генератор**370371Функция, которая возвращает объект [генератора](https://python-all.ru/3.13/glossary.html#term-generator). Она выглядит как обычная функция, за исключением того, что содержит выражения [`yield`](https://python-all.ru/3.13/reference/simple_stmts.html#yield) для получения серии значений, которые можно использовать в цикле [`for`](https://python-all.ru/3.13/reference/compound_stmts.html#for) или получать по одному с помощью функции [`next()`](https://python-all.ru/3.13/library/functions.html#next). См. [Выражения yield](https://python-all.ru/3.13/reference/expressions.html#yieldexpr).372373**итератор генератора**374375Объект, созданный [функцией-генератором](https://python-all.ru/3.13/glossary.html#term-generator-function) или [генераторным выражением](https://python-all.ru/3.13/glossary.html#term-generator-expression).376377Каждое [`yield`](https://python-all.ru/3.13/reference/simple_stmts.html#yield) временно приостанавливает обработку, запоминая состояние выполнения (включая локальные переменные и ожидающие try-инструкции). Когда *итератор генератора* возобновляется, он продолжает с того места, где остановился (в отличие от функций, которые начинают заново при каждом вызове).378379Итераторы генераторов также реализуют метод [`send()`](https://python-all.ru/3.13/reference/expressions.html#generator.send) для отправки значения в приостановленный генератор, и метод [`throw()`](https://python-all.ru/3.13/reference/expressions.html#generator.throw) для возбуждения исключения в точке, где генератор был приостановлен. См. [Методы итератора генератора](https://python-all.ru/3.13/reference/expressions.html#generator-methods).380381**генераторное выражение**382383[Выражение](https://python-all.ru/3.13/glossary.html#term-expression), которое возвращает [итератор](https://python-all.ru/3.13/glossary.html#term-iterator). Оно выглядит как обычное выражение, за которым следует предложение `for`, определяющее переменную цикла, диапазон, и необязательное предложение `if`. Полученное выражение генерирует значения для объемлющей функции:384385```python386>>> sum(i*i for i in range(10)) # сумма квадратов 0, 1, 4, ... 81387285388```389390**обобщённая функция**391392Функция, состоящая из нескольких функций, реализующих одну и ту же операцию для разных типов. Какая реализация должна использоваться при вызове, определяется алгоритмом диспетчеризации.393394См. также статью глоссария [одиночная диспетчеризация](https://python-all.ru/3.13/glossary.html#term-single-dispatch), декоратор [`functools.singledispatch()`](https://python-all.ru/3.13/library/functools.html#functools.singledispatch) и [**PEP 443**](https://python-all.ru/3.13/glossary.html).395396**обобщённый тип**397398[Тип](https://python-all.ru/3.13/glossary.html#term-type), который может быть параметризован; обычно это [класс-контейнер](https://python-all.ru/3.13/reference/datamodel.html#sequence-types), такой как [`list`](https://python-all.ru/3.13/library/stdtypes.html#list) или [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict). Используется для [подсказок типов](https://python-all.ru/3.13/glossary.html#term-type-hint) и [аннотаций](https://python-all.ru/3.13/glossary.html#term-annotation).399400Для получения дополнительных сведений см. [обобщённые псевдонимы типов](https://python-all.ru/3.13/library/stdtypes.html#types-genericalias), [**PEP 483**](https://python-all.ru/3.13/glossary.html), [**PEP 484**](https://python-all.ru/3.13/glossary.html), [**PEP 585**](https://python-all.ru/3.13/glossary.html) и модуль [`typing`](https://python-all.ru/3.13/library/typing.html#module-typing).401402**GIL**403404См. [глобальная блокировка интерпретатора](https://python-all.ru/3.13/glossary.html#term-global-interpreter-lock).405406**глобальная блокировка интерпретатора**407408Механизм, используемый интерпретатором [CPython](https://python-all.ru/3.13/glossary.html#term-CPython) для обеспечения того, чтобы только один поток выполнял [байт-код](https://python-all.ru/3.13/glossary.html#term-bytecode) Python в каждый момент времени. Это упрощает реализацию CPython, делая объектную модель (включая критические встроенные типы, такие как [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict)) неявно безопасной при конкурентном доступе. Блокировка всего интерпретатора упрощает многопоточность интерпретатора, но ценой потери большей части параллелизма, обеспечиваемого многопроцессорными машинами.409410Однако некоторые модули расширения – как стандартные, так и сторонние – спроектированы так, чтобы отпускать GIL при выполнении вычислительно интенсивных задач, таких как сжатие или хеширование. Кроме того, GIL всегда отпускается при операциях ввода-вывода.411412Начиная с Python 3.13, GIL можно отключить с помощью конфигурации сборки [`--disable-gil`](https://python-all.ru/3.13/using/configure.html#cmdoption-disable-gil). После сборки Python с этим параметром код должен выполняться с [`-X gil=0`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) или после установки переменной окружения [`PYTHON_GIL=0`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHON_GIL). Эта функция обеспечивает повышенную производительность многопоточных приложений и упрощает эффективное использование многоядерных процессоров. Подробнее см. [**PEP 703**](https://python-all.ru/3.13/glossary.html).413414**глобальное состояние**415416Данные, доступные во всей программе, такие как переменные уровня модуля, переменные класса или статические переменные C в [модулях расширения](https://python-all.ru/3.13/glossary.html#term-extension-module). В многопоточных программах глобальное состояние, разделяемое между потоками, обычно требует синхронизации для предотвращения [состояний гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) и [гонок данных](https://python-all.ru/3.13/glossary.html#term-data-race).417418**pyc-файл на основе хеша**419420Файл кэша байт-кода, который использует хеш, а не время последнего изменения соответствующего исходного файла для определения своей действительности. См. [Инвалидация кэшированного байт-кода](https://python-all.ru/3.13/reference/import.html#pyc-invalidation).421422**хешируемый**423424Объект называется *хешируемым*, если он имеет хеш-значение, которое никогда не изменяется в течение его жизни (ему нужен метод [`__hash__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__hash__)) и может сравниваться с другими объектами (ему нужен метод [`__eq__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__eq__)). Хешируемые объекты, которые равны при сравнении, должны иметь одинаковое хеш-значение.425426Хешируемость позволяет использовать объект в качестве ключа словаря и элемента множества, поскольку эти структуры данных внутренне используют хеш-значение.427428Большинство неизменяемых встроенных объектов Python хешируемы; изменяемые контейнеры (например, списки или словари) – нет; неизменяемые контейнеры (например, кортежи и frozenset) хешируемы только в том случае, если их элементы хешируемы. Объекты, являющиеся экземплярами пользовательских классов, хешируемы по умолчанию. Все они не равны при сравнении (за исключением сравнения с самим собой), и их хеш-значение получается из [`id()`](https://python-all.ru/3.13/library/functions.html#id).429430**IDLE**431432Интегрированная среда разработки и обучения для Python. [IDLE – редактор и оболочка Python](https://python-all.ru/3.13/library/idle.html#idle) – это базовый редактор и среда интерпретатора, поставляемые со стандартным дистрибутивом Python.433434**бессмертный**435436*Бессмертные объекты* – это деталь реализации CPython, введённая в [**PEP 683**](https://python-all.ru/3.13/glossary.html).437438Если объект бессмертен, его [счётчик ссылок](https://python-all.ru/3.13/glossary.html#term-reference-count) никогда не изменяется, и поэтому он никогда не освобождается во время работы интерпретатора. Например, [`True`](https://python-all.ru/3.13/library/constants.html#True) и [`None`](https://python-all.ru/3.13/library/constants.html#None) являются бессмертными в CPython.439440**неизменяемый**441442Объект с фиксированным значением. Неизменяемые объекты включают числа, строки и кортежи. Такой объект нельзя изменить. Если необходимо сохранить другое значение, нужно создать новый объект. Они играют важную роль в местах, где требуется постоянное хеш-значение, например, в качестве ключа словаря. Неизменяемые объекты по своей природе [потокобезопасны](https://python-all.ru/3.13/glossary.html#term-thread-safe), поскольку их состояние нельзя изменить после создания, что устраняет опасения по поводу неправильно синхронизированной [конкурентной модификации](https://python-all.ru/3.13/glossary.html#term-concurrent-modification).443444**путь импорта**445446Список расположений (или [записей пути](https://python-all.ru/3.13/glossary.html#term-path-entry)), которые просматриваются [искателем на основе пути](https://python-all.ru/3.13/glossary.html#term-path-based-finder) для поиска модулей для импорта. Во время импорта этот список расположений обычно берётся из [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path), но для подпакетов он также может браться из атрибута `__path__` родительского пакета.447448**импорт**449450Процесс, благодаря которому код Python в одном модуле становится доступным коду Python в другом модуле.451452**импортёр**453454Объект, который одновременно находит и загружает модуль; объект, являющийся как [искателем](https://python-all.ru/3.13/glossary.html#term-finder), так и [загрузчиком](https://python-all.ru/3.13/glossary.html#term-loader).455456**интерактивный**457458Python имеет интерактивный интерпретатор, что означает возможность вводить операторы и выражения в приглашении интерпретатора, немедленно выполнять их и видеть результаты. Для этого достаточно запустить `python` без аргументов (возможно, выбрав его из главного меню компьютера). Это очень мощный способ опробовать новые идеи или изучить модули и пакеты (напомним, `help(x)`). Подробнее об интерактивном режиме см. [Интерактивный режим](https://python-all.ru/3.13/tutorial/appendix.html#tut-interac).459460**интерпретируемый**461462Python является интерпретируемым языком, в отличие от компилируемых, хотя различие может быть размытым из-за наличия компилятора байткода. Это означает, что исходные файлы можно запускать напрямую, без явного создания исполняемого файла, который затем выполняется. Интерпретируемые языки обычно имеют более короткий цикл разработки/отладки, чем компилируемые, хотя их программы, как правило, выполняются медленнее. См. также [интерактивный](https://python-all.ru/3.13/glossary.html#term-interactive).463464**завершение работы интерпретатора**465466При запросе на завершение работы интерпретатор Python переходит в специальную фазу, на которой постепенно освобождает все выделенные ресурсы, такие как модули и различные критические внутренние структуры. Он также несколько раз вызывает [сборщик мусора](https://python-all.ru/3.13/glossary.html#term-garbage-collection). Это может вызвать выполнение кода в пользовательских деструкторах или колбэках слабых ссылок. Код, выполняемый во время фазы завершения работы, может столкнуться с различными исключениями, поскольку используемые им ресурсы могут перестать работать (типичные примеры – библиотечные модули или механизм предупреждений).467468Основная причина завершения работы интерпретатора – завершение выполнения `__main__` модуля или запущенного скрипта.469470**итерируемый объект**471472Объект, способный возвращать свои элементы по одному. Примеры итерируемых объектов включают все типы последовательностей (такие как [`list`](https://python-all.ru/3.13/library/stdtypes.html#list), [`str`](https://python-all.ru/3.13/library/stdtypes.html#str), и [`tuple`](https://python-all.ru/3.13/library/stdtypes.html#tuple)) и некоторые типы, не являющиеся последовательностями, такие как [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict), [файловые объекты](https://python-all.ru/3.13/glossary.html#term-file-object), а также объекты любых классов, определённых вами с методом [`__iter__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__iter__) или с методом [`__getitem__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__getitem__), который реализует [семантику последовательности](https://python-all.ru/3.13/glossary.html#term-sequence).473474Итерируемые объекты можно использовать в цикле [`for`](https://python-all.ru/3.13/reference/compound_stmts.html#for) и во многих других местах, где требуется последовательность ([`zip()`](https://python-all.ru/3.13/library/functions.html#zip), [`map()`](https://python-all.ru/3.13/library/functions.html#map), …). Когда итерируемый объект передаётся в качестве аргумента встроенной функции [`iter()`](https://python-all.ru/3.13/library/functions.html#iter), она возвращает итератор для этого объекта. Этот итератор пригоден для однократного прохода по набору значений. При работе с итерируемыми объектами обычно не требуется вызывать `iter()` или самостоятельно работать с объектами итераторов. Инструкция `for` делает это автоматически, создавая временную безымянную переменную для хранения итератора на время цикла. См. также [итератор](https://python-all.ru/3.13/glossary.html#term-iterator), [последовательность](https://python-all.ru/3.13/glossary.html#term-sequence) и [генератор](https://python-all.ru/3.13/glossary.html#term-generator).475476**итератор**477478Объект, представляющий поток данных. Повторные вызовы метода [`__next__()`](https://python-all.ru/3.13/library/stdtypes.html#iterator.__next__) итератора (или передача его встроенной функции [`next()`](https://python-all.ru/3.13/library/functions.html#next)) возвращают последовательные элементы потока. Когда данные заканчиваются, возбуждается исключение [`StopIteration`](https://python-all.ru/3.13/library/exceptions.html#StopIteration). После этого объект итератора исчерпан, и любой дальнейший вызов его метода `__next__()` снова возбуждает `StopIteration`. Итераторы должны иметь метод [`__iter__()`](https://python-all.ru/3.13/library/stdtypes.html#iterator.__iter__), который возвращает сам объект итератора, поэтому каждый итератор также является итерируемым и может использоваться в большинстве мест, где принимаются другие итерируемые объекты. Одним заметным исключением является код, который пытается выполнить многократные проходы итерации. Объект-контейнер (например, [`list`](https://python-all.ru/3.13/library/stdtypes.html#list)) создаёт новый итератор каждый раз, когда вы передаёте его функции [`iter()`](https://python-all.ru/3.13/library/functions.html#iter) или используете в цикле [`for`](https://python-all.ru/3.13/reference/compound_stmts.html#for). Попытка сделать то же самое с итератором приведёт к возврату того же самого исчерпанного объекта итератора, использованного в предыдущем проходе, из-за чего он будет выглядеть как пустой контейнер.479480Дополнительную информацию можно найти в [Iterator Types](https://python-all.ru/3.13/library/stdtypes.html#typeiter).481482**Особенность реализации CPython:** CPython не всегда последовательно применяет требование, чтобы итератор определял [`__iter__()`](https://python-all.ru/3.13/library/stdtypes.html#iterator.__iter__). Кроме того, обратите внимание, что [свободно-поточный](https://python-all.ru/3.13/glossary.html#term-free-threading) CPython не гарантирует [потокобезопасное](https://python-all.ru/3.13/glossary.html#term-thread-safe) поведение операций итератора.483484**функция-ключ**485486Функция-ключ или функция сортировки – это вызываемый объект, возвращающий значение, используемое для сортировки или упорядочивания. Например, [`locale.strxfrm()`](https://python-all.ru/3.13/library/locale.html#locale.strxfrm) используется для создания ключа сортировки, учитывающего локальные соглашения сортировки.487488Ряд инструментов в Python принимают функцию-ключ для управления порядком или группировкой элементов. К ним относятся [`min()`](https://python-all.ru/3.13/library/functions.html#min), [`max()`](https://python-all.ru/3.13/library/functions.html#max), [`sorted()`](https://python-all.ru/3.13/library/functions.html#sorted), [`list.sort()`](https://python-all.ru/3.13/library/stdtypes.html#list.sort), [`heapq.merge()`](https://python-all.ru/3.13/library/heapq.html#heapq.merge), [`heapq.nsmallest()`](https://python-all.ru/3.13/library/heapq.html#heapq.nsmallest), [`heapq.nlargest()`](https://python-all.ru/3.13/library/heapq.html#heapq.nlargest) и [`itertools.groupby()`](https://python-all.ru/3.13/library/itertools.html#itertools.groupby).489490Существует несколько способов создания функции-ключа. Например, метод [`str.casefold()`](https://python-all.ru/3.13/library/stdtypes.html#str.casefold) может служить функцией-ключом для сортировки без учёта регистра. В качестве альтернативы функцию-ключ можно построить из [`lambda`](https://python-all.ru/3.13/reference/expressions.html#lambda)-выражения, такого как `lambda r: (r[0], r[2])`. Кроме того, [`operator.attrgetter()`](https://python-all.ru/3.13/library/operator.html#operator.attrgetter), [`operator.itemgetter()`](https://python-all.ru/3.13/library/operator.html#operator.itemgetter) и [`operator.methodcaller()`](https://python-all.ru/3.13/library/operator.html#operator.methodcaller) – это три конструктора функций-ключей. Примеры создания и использования функций-ключей см. в [Sorting HOW TO](https://python-all.ru/3.13/howto/sorting.html#sortinghowto).491492**именованный аргумент**493494См. [аргумент](https://python-all.ru/3.13/glossary.html#term-argument).495496**лямбда**497498Анонимная встроенная функция, состоящая из одного [выражения](https://python-all.ru/3.13/glossary.html#term-expression), которое вычисляется при вызове функции. Синтаксис создания лямбда-функции: `lambda [parameters]: expression`499500**LBYL**501502Сначала проверь, потом делай (Look before you leap). Этот стиль кодирования явно проверяет предусловия перед вызовами или обращениями. Этот стиль противоположен подходу [EAFP](https://python-all.ru/3.13/glossary.html#term-EAFP) и характеризуется наличием множества инструкций [`if`](https://python-all.ru/3.13/reference/compound_stmts.html#if).503504В многопоточной среде подход LBYL может внести риск возникновения [состояния гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) между «проверкой» и «действием». Например, код `if key in mapping: return mapping[key]` может завершиться ошибкой, если другой поток удалит *ключ* из *отображения* после проверки, но до обращения. Эту проблему можно решить с помощью [блокировок](https://python-all.ru/3.13/glossary.html#term-lock) или используя подход [EAFP](https://python-all.ru/3.13/glossary.html#term-EAFP). См. также [потокобезопасность](https://python-all.ru/3.13/glossary.html#term-thread-safe).505506**лексический анализатор**507508Формальное название для *tokenizer*; см. [токен](https://python-all.ru/3.13/glossary.html#term-token).509510**список**511512Встроенная [последовательность](https://python-all.ru/3.13/glossary.html#term-sequence) Python. Несмотря на название, она больше похожа на массив в других языках, чем на связный список, поскольку доступ к элементам выполняется за *O*(1).513514**списковое включение**515516Компактный способ обработки всех или части элементов последовательности и возврата списка с результатами. `result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0]` генерирует список строк, содержащих чётные шестнадцатеричные числа (0x..) в диапазоне от 0 до 255. Предложение [`if`](https://python-all.ru/3.13/reference/compound_stmts.html#if) является необязательным. Если оно опущено, обрабатываются все элементы в `range(256)`.517518**блокировка**519520[Примитив синхронизации](https://python-all.ru/3.13/glossary.html#term-synchronization-primitive), который позволяет только одному потоку одновременно получать доступ к общему ресурсу. Поток должен захватить блокировку перед доступом к защищаемому ресурсу и освободить её после. Если поток пытается захватить блокировку, уже удерживаемую другим потоком, он будет заблокирован до тех пор, пока блокировка не освободится. Модуль [`threading`](https://python-all.ru/3.13/library/threading.html#module-threading) языка Python предоставляет [`Lock`](https://python-all.ru/3.13/library/threading.html#threading.Lock) (базовую блокировку) и [`RLock`](https://python-all.ru/3.13/library/threading.html#threading.RLock) ([реентерабельную](https://python-all.ru/3.13/glossary.html#term-reentrant) блокировку). Блокировки используются для предотвращения [состояний гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) и обеспечения [потокобезопасного](https://python-all.ru/3.13/glossary.html#term-thread-safe) доступа к общим данным. Существуют альтернативные шаблоны проектирования, такие как очереди, модель производитель/потребитель и локальное состояние потоков. См. также [взаимоблокировку](https://python-all.ru/3.13/glossary.html#term-deadlock) и реентерабельность.521522**без блокировок**523524Операция, которая не захватывает [блокировку](https://python-all.ru/3.13/glossary.html#term-lock) и использует атомарные инструкции процессора для обеспечения корректности. Такие операции могут выполняться параллельно, не блокируя друг друга, и не могут быть заблокированы операциями, удерживающими блокировки. В Python с [free-threaded](https://python-all.ru/3.13/glossary.html#term-free-threading) встроенные типы, такие как [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict) и [`list`](https://python-all.ru/3.13/library/stdtypes.html#list), предоставляют операции чтения без блокировок, что означает, что другие потоки могут наблюдать промежуточные состояния во время многошаговых модификаций, даже если эти модификации удерживают [блокировку на объект](https://python-all.ru/3.13/glossary.html#term-per-object-lock).525526**загрузчик**527528Объект, загружающий модуль. Он должен определять методы `exec_module()` и `create_module()` для реализации интерфейса [`Loader`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.Loader). Загрузчик обычно возвращается [искателем](https://python-all.ru/3.13/glossary.html#term-finder). См. также:529530- [Искатели и загрузчики](https://python-all.ru/3.13/reference/import.html#finders-and-loaders)531- [`importlib.abc.Loader`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.Loader)532- [**PEP 302**](https://python-all.ru/3.13/glossary.html)533534**кодировка локали**535536В Unix это кодировка локали LC\_CTYPE. Её можно задать с помощью [`locale.setlocale(locale.LC_CTYPE, new_locale)`](https://python-all.ru/3.13/library/locale.html#locale.setlocale).537538В Windows это кодовая страница ANSI (например: `"cp1252"`).539540На Android и VxWorks Python использует `"utf-8"` в качестве кодировки локали.541542[`locale.getencoding()`](https://python-all.ru/3.13/library/locale.html#locale.getencoding) можно использовать для получения кодировки локали.543544См. также [кодировку файловой системы и обработчик ошибок](https://python-all.ru/3.13/glossary.html#term-filesystem-encoding-and-error-handler).545546**магический метод**547548Неформальный синоним [специального метода](https://python-all.ru/3.13/glossary.html#term-special-method).549550**отображение**551552Контейнер, поддерживающий произвольный поиск по ключу и реализующий методы, указанные в [`collections.abc.Mapping`](https://python-all.ru/3.13/library/collections.abc.html#collections.abc.Mapping) или [`collections.abc.MutableMapping`](https://python-all.ru/3.13/library/collections.abc.html#collections.abc.MutableMapping) [абстрактных базовых классов](https://python-all.ru/3.13/library/collections.abc.html#collections-abstract-base-classes). Примеры включают [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict), [`collections.defaultdict`](https://python-all.ru/3.13/library/collections.html#collections.defaultdict), [`collections.OrderedDict`](https://python-all.ru/3.13/library/collections.html#collections.OrderedDict) и [`collections.Counter`](https://python-all.ru/3.13/library/collections.html#collections.Counter).553554**мета-искатель путей**555556[Искатель](https://python-all.ru/3.13/glossary.html#term-finder), возвращаемый поиском по [`sys.meta_path`](https://python-all.ru/3.13/library/sys.html#sys.meta_path). Мета-искатели путей связаны с [искателями записей путей](https://python-all.ru/3.13/glossary.html#term-path-entry-finder), но отличаются от них.557558См. [`importlib.abc.MetaPathFinder`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.MetaPathFinder) для получения списка методов, реализуемых мета-искателями путей.559560**метакласс**561562Класс класса. Определения классов создают имя класса, словарь класса и список базовых классов. Метакласс отвечает за приём этих трёх аргументов и создание класса. Большинство объектно-ориентированных языков программирования предоставляют реализацию по умолчанию. Особенность Python в том, что можно создавать пользовательские метаклассы. Большинству пользователей этот инструмент никогда не понадобится, но когда возникает необходимость, метаклассы могут предоставить мощные и элегантные решения. Они использовались для логирования доступа к атрибутам, добавления потокобезопасности, отслеживания создания объектов, реализации синглтонов и многих других задач.563564Дополнительную информацию можно найти в [Metaclasses](https://python-all.ru/3.13/reference/datamodel.html#metaclasses).565566**метод**567568Функция, определённая внутри тела класса. При вызове как атрибут экземпляра этого класса метод получает объект экземпляра в качестве первого [аргумента](https://python-all.ru/3.13/glossary.html#term-argument) (обычно называемого `self`). См. [функцию](https://python-all.ru/3.13/glossary.html#term-function) и [вложенную область видимости](https://python-all.ru/3.13/glossary.html#term-nested-scope).569570**порядок разрешения методов**571572Порядок разрешения методов – это порядок, в котором базовые классы просматриваются при поиске члена. Подробности алгоритма, используемого интерпретатором Python начиная с версии 2.3, см. в [The Python 2.3 Method Resolution Order](https://python-all.ru/3.13/howto/mro.html#python-2-3-mro).573574**модуль**575576Объект, служащий организационной единицей кода Python. Модули имеют пространство имён, содержащее произвольные объекты Python. Модули загружаются в Python в процессе [импортирования](https://python-all.ru/3.13/glossary.html#term-importing).577578См. также [пакет](https://python-all.ru/3.13/glossary.html#term-package).579580**спецификация модуля**581582Пространство имён, содержащее информацию, связанную с импортом, используемую для загрузки модуля. Экземпляр [`importlib.machinery.ModuleSpec`](https://python-all.ru/3.13/library/importlib.html#importlib.machinery.ModuleSpec).583584См. также [спецификации модулей](https://python-all.ru/3.13/reference/import.html#module-specs).585586**MRO**587588См. [порядок разрешения методов](https://python-all.ru/3.13/glossary.html#term-method-resolution-order).589590**изменяемый**591592[Объект](https://python-all.ru/3.13/glossary.html#term-object), состояние которого может изменяться в ходе выполнения программы. В многопоточных программах изменяемые объекты, разделяемые между потоками, требуют тщательной синхронизации во избежание [состояний гонки](https://python-all.ru/3.13/glossary.html#term-race-condition). См. также [неизменяемый](https://python-all.ru/3.13/glossary.html#term-immutable), [потокобезопасный](https://python-all.ru/3.13/glossary.html#term-thread-safe) и [конкурентное изменение](https://python-all.ru/3.13/glossary.html#term-concurrent-modification).593594**именованный кортеж**595596Термин «именованный кортеж» применяется к любому типу или классу, наследующему от tuple и чьи индексируемые элементы также доступны по именованным атрибутам. Такой тип или класс может иметь и другие особенности.597598Несколько встроенных типов являются именованными кортежами, включая значения, возвращаемые [`time.localtime()`](https://python-all.ru/3.13/library/time.html#time.localtime) и [`os.stat()`](https://python-all.ru/3.13/library/os.html#os.stat). Другой пример – [`sys.float_info`](https://python-all.ru/3.13/library/sys.html#sys.float_info):599600```python601>>> sys.float_info[1] # доступ по индексу6021024603>>> sys.float_info.max_exp # доступ по именованному полю6041024605>>> isinstance(sys.float_info, tuple) # вид кортежа606True607```608609Некоторые именованные кортежи являются встроенными типами (как в примерах выше). Альтернативно, именованный кортеж можно создать из обычного определения класса, наследующего от [`tuple`](https://python-all.ru/3.13/library/stdtypes.html#tuple) и определяющего именованные поля. Такой класс можно написать вручную, создать наследованием от [`typing.NamedTuple`](https://python-all.ru/3.13/library/typing.html#typing.NamedTuple) или с помощью фабричной функции [`collections.namedtuple()`](https://python-all.ru/3.13/library/collections.html#collections.namedtuple). Последние два способа также добавляют некоторые дополнительные методы, которые могут отсутствовать в написанных вручную или встроенных именованных кортежах.610611**пространство имён**612613Место, где хранится переменная. Пространства имён реализованы как словари. Существуют локальное, глобальное и встроенное пространства имён, а также вложенные пространства имён в объектах (в методах). Пространства имён способствуют модульности, предотвращая конфликты имён. Например, функции [`builtins.open`](https://python-all.ru/3.13/library/functions.html#open) и [`os.open()`](https://python-all.ru/3.13/library/os.html#os.open) различаются своими пространствами имён. Пространства имён также облегчают читаемость и поддержку, показывая, какой модуль реализует функцию. Например, запись [`random.seed()`](https://python-all.ru/3.13/library/random.html#random.seed) или [`itertools.islice()`](https://python-all.ru/3.13/library/itertools.html#itertools.islice) ясно даёт понять, что эти функции реализованы модулями [`random`](https://python-all.ru/3.13/library/random.html#module-random) и [`itertools`](https://python-all.ru/3.13/library/itertools.html#module-itertools) соответственно.614615**пакет пространства имён**616617[Пакет](https://python-all.ru/3.13/glossary.html#term-package), который служит только контейнером для подпакетов. Пакеты пространств имён могут не иметь физического представления и, в частности, не похожи на [обычный пакет](https://python-all.ru/3.13/glossary.html#term-regular-package), поскольку у них нет файла `__init__.py`.618619Пакеты пространств имён позволяют нескольким отдельно устанавливаемым пакетам иметь общий родительский пакет. В противном случае рекомендуется использовать [обычный пакет](https://python-all.ru/3.13/glossary.html#term-regular-package).620621Для получения дополнительной информации см. [**PEP 420**](https://python-all.ru/3.13/glossary.html) и [пакеты пространств имён](https://python-all.ru/3.13/reference/import.html#reference-namespace-package).622623См. также [модуль](https://python-all.ru/3.13/glossary.html#term-module).624625**нативный код**626627Код, скомпилированный в машинные инструкции и выполняемый непосредственно на процессоре, в отличие от кода, который интерпретируется или выполняется в виртуальной машине. В контексте Python нативный код обычно относится к коду на C, C++, Rust или Fortran в [модулях расширения](https://python-all.ru/3.13/glossary.html#term-extension-module), которые можно вызывать из Python. См. также модуль расширения.628629**вложенная область видимости**630631Возможность обращаться к переменной из внешнего определения. Например, функция, определённая внутри другой функции, может обращаться к переменным внешней функции. Обратите внимание: вложенные области видимости по умолчанию работают только для чтения, но не для присваивания. Локальные переменные и читаются, и записываются в самой внутренней области. Аналогично, глобальные переменные читаются и записываются в глобальном пространстве имён. [`nonlocal`](https://python-all.ru/3.13/reference/simple_stmts.html#nonlocal) позволяет записывать во внешние области.632633**класс нового стиля**634635Старое название разновидности классов, которая теперь используется для всех объектов-классов. В более ранних версиях Python только классы нового стиля могли использовать новые универсальные возможности Python, такие как [`__slots__`](https://python-all.ru/3.13/reference/datamodel.html#object.__slots__), дескрипторы, свойства, [`__getattribute__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__getattribute__), методы класса и статические методы.636637**недетерминированный**638639Поведение, при котором результат выполнения программы может различаться между запусками с одними и теми же входными данными. В многопоточных программах недетерминированное поведение часто возникает из-за [состояний гонки](https://python-all.ru/3.13/glossary.html#term-race-condition), когда относительное время выполнения или чередование потоков влияет на результат. Правильная синхронизация с помощью [блокировок](https://python-all.ru/3.13/glossary.html#term-lock) и других [примитивов синхронизации](https://python-all.ru/3.13/glossary.html#term-synchronization-primitive) помогает обеспечить детерминированное поведение.640641**объект**642643Любые данные с состоянием (атрибуты или значение) и определённым поведением (методы). Также конечный базовый класс любого [класса нового стиля](https://python-all.ru/3.13/glossary.html#term-new-style-class).644645**оптимизированная область видимости**646647Область видимости, в которой имена целевых локальных переменных достоверно известны компилятору на этапе компиляции кода, что позволяет оптимизировать доступ на чтение и запись к этим именам. Локальные пространства имён функций, генераторов, корутин, включений и генераторных выражений оптимизируются таким образом. Примечание: большинство оптимизаций интерпретатора применяются ко всем областям видимости, и только те, которые полагаются на известный набор локальных и нелокальных имён переменных, ограничены оптимизированными областями.648649**пакет**650651Python [модуль](https://python-all.ru/3.13/glossary.html#term-module), который может содержать подмодули или рекурсивно подпакеты. Технически пакет – это модуль Python с атрибутом `__path__`.652653См. также [обычный пакет](https://python-all.ru/3.13/glossary.html#term-regular-package) и [пакет пространства имён](https://python-all.ru/3.13/glossary.html#term-namespace-package).654655**параллелизм**656657Одновременное выполнение нескольких операций (например, на нескольких ядрах CPU). В сборках Python с [глобальной блокировкой интерпретатора (GIL)](https://python-all.ru/3.13/glossary.html#term-global-interpreter-lock) только один поток выполняет байт-код Python за раз, поэтому для использования нескольких ядер CPU обычно требуются несколько процессов (например, [`multiprocessing`](https://python-all.ru/3.13/library/multiprocessing.html#module-multiprocessing)) или нативные расширения, освобождающие GIL. В [свободно-поточном](https://python-all.ru/3.13/glossary.html#term-free-threading) Python несколько потоков Python могут одновременно выполнять код Python на разных ядрах.658659**параметр**660661Именованная сущность в определении [функции](https://python-all.ru/3.13/glossary.html#term-function) (или метода), которая указывает на [аргумент](https://python-all.ru/3.13/glossary.html#term-argument) (или в некоторых случаях аргументы), который функция может принимать. Существует пять видов параметров:662663- *позиционно-ключевой*: указывает аргумент, который может быть передан либо [позиционно](https://python-all.ru/3.13/glossary.html#term-argument), либо как именованный аргумент. Это тип параметра по умолчанию, например *foo* и *bar* в следующем примере:664665 ```python666 def func(foo, bar=None): ...667 ```668669- *только позиционный*: указывает аргумент, который может быть передан только по позиции. Параметры только по позиции можно определить, включив символ `/` в список параметров определения функции после них, например *posonly1* и *posonly2* в следующем примере:670671 ```python672 def func(posonly1, posonly2, /, positional_or_keyword): ...673 ```674675- *только ключевой*: указывает аргумент, который может быть передан только по ключевому слову. Параметры только по ключевым словам можно определить, включив один вариативно-позиционный параметр или просто `*` в список параметров определения функции перед ними, например *kw\_only1* и *kw\_only2* в следующем примере:676677 ```python678 def func(arg, *, kw_only1, kw_only2): ...679 ```680- *вариативно-позиционный*: указывает, что может быть предоставлена произвольная последовательность позиционных аргументов (в дополнение к любым позиционным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `*` перед именем параметра, например *args* в следующем примере:681682 ```python683 def func(*args, **kwargs): ...684 ```685- *вариативно-ключевой*: указывает, что может быть предоставлено произвольно много именованных аргументов (в дополнение к любым именованным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `**` перед именем параметра, например *kwargs* в примере выше.686687Параметры могут определять как необязательные, так и обязательные аргументы, а также значения по умолчанию для некоторых необязательных аргументов.688689См. также статью глоссария [аргумент](https://python-all.ru/3.13/glossary.html#term-argument), вопрос из FAQ о [разнице между аргументами и параметрами](https://python-all.ru/3.13/faq/programming.html#faq-argument-vs-parameter), класс [`inspect.Parameter`](https://python-all.ru/3.13/library/inspect.html#inspect.Parameter), раздел [Определения функций](https://python-all.ru/3.13/reference/compound_stmts.html#function) и [**PEP 362**](https://python-all.ru/3.13/glossary.html).690691**блокировка на объект**692693[Блокировка](https://python-all.ru/3.13/glossary.html#term-lock), связанная с отдельным экземпляром объекта, а не с глобальной блокировкой, общей для всех объектов. В [свободно-поточном](https://python-all.ru/3.13/glossary.html#term-free-threading) Python встроенные типы, такие как [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict) и [`list`](https://python-all.ru/3.13/library/stdtypes.html#list), используют блокировки на объект, чтобы разрешить параллельные операции над разными объектами, последовательно выполняя операции над одним и тем же объектом. Операции, удерживающие блокировку на объект, предотвращают выполнение других блокирующих операций над тем же объектом, но не блокируют [операции без блокировки](https://python-all.ru/3.13/glossary.html#term-lock-free).694695**элемент пути**696697Отдельное расположение в [пути импорта](https://python-all.ru/3.13/glossary.html#term-import-path), которое [поисковик на основе пути](https://python-all.ru/3.13/glossary.html#term-path-based-finder) просматривает для поиска модулей для импорта.698699**поисковик элемента пути**700701[Поисковик](https://python-all.ru/3.13/glossary.html#term-finder), возвращаемый вызываемым объектом из [`sys.path_hooks`](https://python-all.ru/3.13/library/sys.html#sys.path_hooks) (т.е. [перехватчиком элемента пути](https://python-all.ru/3.13/glossary.html#term-path-entry-hook)), который умеет находить модули по заданному [элементу пути](https://python-all.ru/3.13/glossary.html#term-path-entry).702703Методы, которые реализуют поисковики элементов пути, описаны в [`importlib.abc.PathEntryFinder`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.PathEntryFinder).704705**перехватчик элемента пути**706707Вызываемый объект из списка [`sys.path_hooks`](https://python-all.ru/3.13/library/sys.html#sys.path_hooks), который возвращает [поисковик элемента пути](https://python-all.ru/3.13/glossary.html#term-path-entry-finder), если он умеет находить модули на конкретном [элементе пути](https://python-all.ru/3.13/glossary.html#term-path-entry).708709**поисковик на основе пути**710711Один из [поисковиков по мета-пути](https://python-all.ru/3.13/glossary.html#term-meta-path-finder) по умолчанию, который ищет модули в [пути импорта](https://python-all.ru/3.13/glossary.html#term-import-path).712713**объект, подобный пути**714715Объект, представляющий путь файловой системы. Объект, подобный пути, – это либо объект [`str`](https://python-all.ru/3.13/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes), представляющий путь, либо объект, реализующий протокол [`os.PathLike`](https://python-all.ru/3.13/library/os.html#os.PathLike). Объект, поддерживающий протокол `os.PathLike`, может быть преобразован в путь файловой системы `str` или `bytes` вызовом функции [`os.fspath()`](https://python-all.ru/3.13/library/os.html#os.fspath); [`os.fsdecode()`](https://python-all.ru/3.13/library/os.html#os.fsdecode) и [`os.fsencode()`](https://python-all.ru/3.13/library/os.html#os.fsencode) могут использоваться для гарантированного получения результата `str` или `bytes` соответственно. Введено [**PEP 519**](https://python-all.ru/3.13/glossary.html).716717**PEP**718719Python Enhancement Proposal. PEP – это проектный документ, предоставляющий информацию сообществу Python или описывающий новую возможность для Python, его процессов или окружения. PEP должны содержать краткую техническую спецификацию и обоснование предлагаемых возможностей.720721PEP предназначены быть основным механизмом для предложения крупных новых возможностей, сбора мнений сообщества по какому-либо вопросу и документирования проектных решений, принятых в Python. Автор PEP отвечает за достижение консенсуса в сообществе и документирование особых мнений.722723См. [**PEP 1**](https://python-all.ru/3.13/glossary.html).724725**часть**726727Набор файлов в одном каталоге (возможно, хранящемся в zip-файле), которые входят в пакет пространства имён, как определено в [**PEP 420**](https://python-all.ru/3.13/glossary.html).728729**позиционный аргумент**730731См. [аргумент](https://python-all.ru/3.13/glossary.html#term-argument).732733**временный API**734735Временный API – это API, который намеренно исключён из гарантий обратной совместимости стандартной библиотеки. Хотя серьёзные изменения таких интерфейсов не ожидаются, пока они помечены как временные, возможны несовместимые с предыдущими версиями изменения (вплоть до удаления интерфейса), если основные разработчики сочтут это необходимым. Такие изменения не будут вноситься без веской причины – они произойдут только в случае обнаружения серьёзных фундаментальных недостатков, которые были упущены до включения API.736737Даже для временных API несовместимые с предыдущими версиями изменения рассматриваются как «крайняя мера» – по-прежнему будут предприниматься все попытки найти обратно совместимое решение для любых выявленных проблем.738739Этот процесс позволяет стандартной библиотеке продолжать развиваться со временем, не закрепляя проблемные проектные ошибки на длительные периоды времени. Подробнее см. [**PEP 411**](https://python-all.ru/3.13/glossary.html).740741**временный пакет**742743См. [временный API](https://python-all.ru/3.13/glossary.html#term-provisional-API).744745**Python 3000**746747Прозвище для линейки релизов Python 3.x (придуманное давно, когда выход версии 3 был чем-то из далёкого будущего). Также сокращённо называется «Py3k».748749**Pythonic**750751Идея или фрагмент кода, который строго следует наиболее распространённым идиомам языка Python, а не реализует код с использованием концепций, общих для других языков. Например, распространённая идиома в Python – цикл по всем элементам итерируемого объекта с помощью оператора [`for`](https://python-all.ru/3.13/reference/compound_stmts.html#for). Многие другие языки не имеют такой конструкции, поэтому люди, незнакомые с Python, иногда используют вместо этого числовой счётчик:752753```python754for i in range(len(food)):755 print(food[i])756```757758В отличие от более чистого, питоничного метода:759760```python761for piece in food:762 print(piece)763```764765**квалифицированное имя**766767Точечное имя, показывающее «путь» от глобальной области видимости модуля к классу, функции или методу, определённым в этом модуле, как определено в [**PEP 3155**](https://python-all.ru/3.13/glossary.html). Для функций и классов верхнего уровня квалифицированное имя совпадает с именем объекта:768769```python770>>> class C:771... class D:772... def meth(self):773... pass774...775>>> C.__qualname__776'C'777>>> C.D.__qualname__778'C.D'779>>> C.D.meth.__qualname__780'C.D.meth'781```782783При использовании для ссылки на модули *полностью квалифицированное имя* означает полный точечный путь к модулю, включая любые родительские пакеты, например `email.mime.text`:784785```python786>>> import email.mime.text787>>> email.mime.text.__name__788'email.mime.text'789```790791**состояние гонки**792793A condition of a program where the behavior depends on the relative timing or ordering of events, particularly in multi-threaded programs. Race conditions can lead to [non-deterministic](https://python-all.ru/3.13/glossary.html#term-non-deterministic) behavior and bugs that are difficult to reproduce. A [data race](https://python-all.ru/3.13/glossary.html#term-data-race) is a specific type of race condition involving unsynchronized access to shared memory. The [LBYL](https://python-all.ru/3.13/glossary.html#term-LBYL) coding style is particularly susceptible to race conditions in multi-threaded code. Using [locks](https://python-all.ru/3.13/glossary.html#term-lock) and other [synchronization primitives](https://python-all.ru/3.13/glossary.html#term-synchronization-primitive) helps prevent race conditions.794795**счётчик ссылок**796797Количество ссылок на объект. Когда счётчик ссылок объекта падает до нуля, он освобождается. Некоторые объекты являются [бессмертными](https://python-all.ru/3.13/glossary.html#term-immortal) и имеют счётчики ссылок, которые никогда не изменяются, и поэтому эти объекты никогда не освобождаются. Подсчёт ссылок обычно не виден из кода Python, но это ключевой элемент реализации [CPython](https://python-all.ru/3.13/glossary.html#term-CPython). Программисты могут вызвать функцию [`sys.getrefcount()`](https://python-all.ru/3.13/library/sys.html#sys.getrefcount) для получения счётчика ссылок для конкретного объекта.798799В [CPython](https://python-all.ru/3.13/glossary.html#term-CPython) счётчики ссылок не считаются стабильными или строго определёнными значениями; количество ссылок на объект и то, как на это количество влияет код Python, может различаться между версиями.800801**обычный пакет**802803Традиционный [пакет](https://python-all.ru/3.13/glossary.html#term-package), например каталог, содержащий файл `__init__.py`.804805См. также [пространство имён пакета](https://python-all.ru/3.13/glossary.html#term-namespace-package).806807**реентерабельный**808809Свойство функции или [блокировки](https://python-all.ru/3.13/glossary.html#term-lock), которое позволяет вызывать её или захватывать несколько раз одним и тем же потоком без возникновения ошибок или [взаимоблокировки](https://python-all.ru/3.13/glossary.html#term-deadlock).810811Для функций реентерабельность означает, что функция может быть безопасно вызвана снова до завершения предыдущего вызова, что важно, когда функции могут вызываться рекурсивно или из обработчиков сигналов. Потоково-небезопасные функции могут быть [недетерминированными](https://python-all.ru/3.13/glossary.html#term-non-deterministic), если они вызываются реентерабельно в многопоточной программе.812813Для блокировок [`threading.RLock`](https://python-all.ru/3.13/library/threading.html#threading.RLock) (реентерабельная блокировка) в Python является реентерабельной, то есть поток, уже удерживающий блокировку, может захватить её снова без блокировки. Напротив, [`threading.Lock`](https://python-all.ru/3.13/library/threading.html#threading.Lock) не является реентерабельной – попытка захватить её дважды из одного потока приведёт к взаимоблокировке.814815См. также [блокировку](https://python-all.ru/3.13/glossary.html#term-lock) и [взаимоблокировку](https://python-all.ru/3.13/glossary.html#term-deadlock).816817**REPL**818819Акроним от «read–eval–print loop» (цикл чтения-вычисления-вывода), другое название для [интерактивной](https://python-all.ru/3.13/glossary.html#term-interactive) оболочки интерпретатора.820821**\_\_slots\_\_**822823Объявление внутри класса, которое экономит память, заранее выделяя место для атрибутов экземпляра и устраняя словари экземпляров. Хотя этот метод популярен, его правильное применение требует некоторой аккуратности, и его лучше использовать только в редких случаях, когда в приложении с критичной памятью создаётся большое количество экземпляров.824825**последовательность**826827An [iterable](https://python-all.ru/3.13/glossary.html#term-iterable) which supports efficient element access using integer indices via the [`__getitem__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__getitem__) special method and defines a [`__len__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__len__) method that returns the length of the sequence. Some built-in sequence types are [`list`](https://python-all.ru/3.13/library/stdtypes.html#list), [`str`](https://python-all.ru/3.13/library/stdtypes.html#str), [`tuple`](https://python-all.ru/3.13/library/stdtypes.html#tuple), and [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes). Note that [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict) also supports `__getitem__()` and `__len__()`, but is considered a mapping rather than a sequence because the lookups use arbitrary [hashable](https://python-all.ru/3.13/glossary.html#term-hashable) keys rather than integers.828829The [`collections.abc.Sequence`](https://python-all.ru/3.13/library/collections.abc.html#collections.abc.Sequence) abstract base class defines a much richer interface that goes beyond just [`__getitem__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__getitem__) and [`__len__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__len__), adding [`count()`](https://python-all.ru/3.13/library/stdtypes.html#sequence.count), [`index()`](https://python-all.ru/3.13/library/stdtypes.html#sequence.index), [`__contains__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__contains__), and [`__reversed__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__reversed__). Types that implement this expanded interface can be registered explicitly using [`register()`](https://python-all.ru/3.13/library/abc.html#abc.ABCMeta.register). For more documentation on sequence methods generally, see [Common Sequence Operations](https://python-all.ru/3.13/library/stdtypes.html#typesseq-common).830831**генератор множества**832833Компактный способ обработать все или часть элементов итерируемого объекта и вернуть множество с результатами. `results = {c for c in 'abracadabra' if c not in 'abc'}` создает множество строк `{'r', 'd'}`. См. [Отображения для списков, множеств и словарей](https://python-all.ru/3.13/reference/expressions.html#comprehensions).834835**одиночная диспетчеризация**836837A form of [generic function](https://python-all.ru/3.13/glossary.html#term-generic-function) dispatch where the implementation is chosen based on the type of a single argument.838839**срез**840841Объект, обычно содержащий часть [последовательности](https://python-all.ru/3.13/glossary.html#term-sequence). Срез создается с помощью индексации, `[]` с двоеточиями между числами, когда указано несколько, как в `variable_name[1:3:5]`. Квадратные скобки (индексация) внутри используют объекты [`slice`](https://python-all.ru/3.13/library/functions.html#slice).842843**мягкое устаревание**844845API с мягким устареванием не следует использовать в новом коде, но в уже существующем коде его использование безопасно. API остаётся документированным и протестированным, но не будет развиваться дальше.846847Мягкое устаревание, в отличие от обычного, не предусматривает удаление API и не будет выдавать предупреждений.848849См. [PEP 387: Soft Deprecation](https://python-all.ru/3.13/glossary.html).850851**специальный метод**852853A 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.13/reference/datamodel.html#specialnames).854855**стандартная библиотека**856857The collection of [packages](https://python-all.ru/3.13/glossary.html#term-package), [modules](https://python-all.ru/3.13/glossary.html#term-module) and [extension modules](https://python-all.ru/3.13/glossary.html#term-extension-module) distributed as a part of the official Python interpreter package. The exact membership of the collection may vary based on platform, available system libraries, or other criteria. Documentation can be found at [The Python Standard Library](https://python-all.ru/3.13/library/index.html#library-index).858859См. также [`sys.stdlib_module_names`](https://python-all.ru/3.13/library/sys.html#sys.stdlib_module_names) для списка всех возможных имён модулей стандартной библиотеки.860861**инструкция**862863A statement is part of a suite (a “block” of code). A statement is either an [expression](https://python-all.ru/3.13/glossary.html#term-expression) or one of several constructs with a keyword, such as [`if`](https://python-all.ru/3.13/reference/compound_stmts.html#if), [`while`](https://python-all.ru/3.13/reference/compound_stmts.html#while) or [`for`](https://python-all.ru/3.13/reference/compound_stmts.html#for).864865**статический анализатор типов**866867An external tool that reads Python code and analyzes it, looking for issues such as incorrect types. See also [type hints](https://python-all.ru/3.13/glossary.html#term-type-hint) and the [`typing`](https://python-all.ru/3.13/library/typing.html#module-typing) module.868869**stdlib**870871An abbreviation of [standard library](https://python-all.ru/3.13/glossary.html#term-standard-library).872873**кража (steal)**874875В C API Python «*кража*» аргумента означает, что право собственности на аргумент передаётся вызываемой функции. Вызывающий код не должен использовать эту ссылку после вызова. Обычно функции, которые «крадут» аргумент, делают это даже в случае неудачи.876877See [Reference Count Details](https://python-all.ru/3.13/c-api/intro.html#api-refcountdetails) for a full explanation.878879**сильная ссылка**880881В C API Python сильная ссылка – это ссылка на объект, которой владеет код, содержащий ссылку. Сильная ссылка получается вызовом [`Py_INCREF()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_INCREF) при создании ссылки и освобождается с помощью [`Py_DECREF()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_DECREF) при удалении ссылки.882883Функцию [`Py_NewRef()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_NewRef) можно использовать для создания сильной ссылки на объект. Обычно перед выходом из области видимости сильной ссылки необходимо вызвать функцию [`Py_DECREF()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_DECREF) на этой сильной ссылке, чтобы избежать утечки одной ссылки.884885See also [borrowed reference](https://python-all.ru/3.13/glossary.html#term-borrowed-reference).886887**примитив синхронизации**888889Базовый строительный блок для координации (синхронизации) выполнения нескольких потоков для обеспечения [потокобезопасного](https://python-all.ru/3.13/glossary.html#term-thread-safe) доступа к общим ресурсам. Модуль [`threading`](https://python-all.ru/3.13/library/threading.html#module-threading) в Python предоставляет несколько примитивов синхронизации, включая [`Lock`](https://python-all.ru/3.13/library/threading.html#threading.Lock), [`RLock`](https://python-all.ru/3.13/library/threading.html#threading.RLock), [`Semaphore`](https://python-all.ru/3.13/library/threading.html#threading.Semaphore), [`Condition`](https://python-all.ru/3.13/library/threading.html#threading.Condition), [`Event`](https://python-all.ru/3.13/library/threading.html#threading.Event) и [`Barrier`](https://python-all.ru/3.13/library/threading.html#threading.Barrier). Кроме того, модуль [`queue`](https://python-all.ru/3.13/library/queue.html#module-queue) предоставляет очереди с множеством производителей и потребителей, которые особенно полезны в многопоточных программах. Эти примитивы помогают предотвратить [состояния гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) и координировать выполнение потоков. См. также [блокировку](https://python-all.ru/3.13/glossary.html#term-lock).890891**кодировка текста**892893Строка в Python – это последовательность кодовых точек Unicode (в диапазоне `U+0000`–`U+10FFFF`). Чтобы сохранить или передать строку, её необходимо сериализовать в последовательность байтов.894895Сериализация строки в последовательность байтов называется «кодированием», а восстановление строки из последовательности байтов – «декодированием».896897Существует множество различных [кодеков](https://python-all.ru/3.13/library/codecs.html#standard-encodings) для сериализации текста, которые в совокупности называются «кодировками текста».898899**текстовый файл**900901[Объект файла](https://python-all.ru/3.13/glossary.html#term-file-object), способный читать и записывать объекты [`str`](https://python-all.ru/3.13/library/stdtypes.html#str). Часто текстовый файл на самом деле обращается к байт-ориентированному потоку данных и автоматически обрабатывает [кодировку текста](https://python-all.ru/3.13/glossary.html#term-text-encoding). Примеры текстовых файлов: файлы, открытые в текстовом режиме (`'r'` или `'w'`), [`sys.stdin`](https://python-all.ru/3.13/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.13/library/sys.html#sys.stdout) и экземпляры [`io.StringIO`](https://python-all.ru/3.13/library/io.html#io.StringIO).902903См. также [двоичный файл](https://python-all.ru/3.13/glossary.html#term-binary-file) для объекта файла, способного читать и записывать [байтоподобные объекты](https://python-all.ru/3.13/glossary.html#term-bytes-like-object).904905**потокобезопасный**906907Модуль, функция или класс, которые корректно работают при одновременном использовании несколькими потоками. Потокобезопасный код использует соответствующие [примитивы синхронизации](https://python-all.ru/3.13/glossary.html#term-synchronization-primitive), такие как [блокировки](https://python-all.ru/3.13/glossary.html#term-lock), для защиты общего изменяемого состояния, либо спроектирован так, чтобы вообще избегать общего изменяемого состояния. В [свободно-поточной](https://python-all.ru/3.13/glossary.html#term-free-threading) сборке встроенные типы, такие как [`dict`](https://python-all.ru/3.13/library/stdtypes.html#dict), [`list`](https://python-all.ru/3.13/library/stdtypes.html#list) и [`set`](https://python-all.ru/3.13/library/stdtypes.html#set), используют внутреннюю блокировку, чтобы сделать многие операции потокобезопасными, хотя потокобезопасность не обязательно гарантируется. Код, не являющийся потокобезопасным, может сталкиваться с [состояниями гонки](https://python-all.ru/3.13/glossary.html#term-race-condition) и [гонками данных](https://python-all.ru/3.13/glossary.html#term-data-race) при использовании в многопоточных программах.908909**токен**910911Маленькая единица исходного кода, генерируемая [лексическим анализатором](https://python-all.ru/3.13/reference/lexical_analysis.html#lexical) (также называется *токенизатором*). Имена, числа, строки, операторы, символы новой строки и подобное представляются токенами.912913Модуль [`tokenize`](https://python-all.ru/3.13/library/tokenize.html#module-tokenize) предоставляет лексический анализатор Python. Модуль [`token`](https://python-all.ru/3.13/library/token.html#module-token) содержит информацию о различных типах токенов.914915**строка в тройных кавычках**916917Строка, ограниченная тремя экземплярами кавычек (”) или апострофов (‘). Хотя они не предоставляют никакой функциональности, недоступной в строках с одинарными кавычками, они полезны по ряду причин. Они позволяют включать неэкранированные одинарные и двойные кавычки внутри строки и могут занимать несколько строк без использования символа продолжения, что делает их особенно полезными при написании докстрингов.918919**тип**920921Тип объекта Python определяет, что это за объект; каждый объект имеет тип. Тип объекта доступен как его атрибут [`__class__`](https://python-all.ru/3.13/reference/datamodel.html#object.__class__) или может быть получен с помощью `type(obj)`.922923**псевдоним типа**924925Синоним для типа, создаваемый присваиванием типа идентификатору.926927Псевдонимы типов полезны для упрощения [аннотаций типов](https://python-all.ru/3.13/glossary.html#term-type-hint). Например:928929```python930def remove_gray_shades(931 colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:932 pass933```934935можно сделать более читаемым следующим образом:936937```python938Color = tuple[int, int, int]939940def remove_gray_shades(colors: list[Color]) -> list[Color]:941 pass942```943944См. [`typing`](https://python-all.ru/3.13/library/typing.html#module-typing) и [**PEP 484**](https://python-all.ru/3.13/glossary.html), в которых описывается эта функциональность.945946**подсказка типа**947948[Аннотация](https://python-all.ru/3.13/glossary.html#term-annotation), которая указывает ожидаемый тип для переменной, атрибута класса или параметра функции или возвращаемого значения.949950Подсказки типа являются необязательными и не проверяются Python, но они полезны для [статических анализаторов типов](https://python-all.ru/3.13/glossary.html#term-static-type-checker). Они также могут помогать IDE с автодополнением и рефакторингом.951952Подсказки типа глобальных переменных, атрибутов классов и функций, но не локальных переменных, можно получить с помощью [`typing.get_type_hints()`](https://python-all.ru/3.13/library/typing.html#typing.get_type_hints).953954См. [`typing`](https://python-all.ru/3.13/library/typing.html#module-typing) и [**PEP 484**](https://python-all.ru/3.13/glossary.html), в которых описывается эта функциональность.955956**универсальные символы новой строки**957958Способ интерпретации текстовых потоков, при котором все следующие символы распознаются как конец строки: соглашение Unix о конце строки `'\n'`, соглашение Windows `'\r\n'` и старое соглашение Macintosh `'\r'`. См. [**PEP 278**](https://python-all.ru/3.13/glossary.html) и [**PEP 3116**](https://python-all.ru/3.13/glossary.html), а также [`bytes.splitlines()`](https://python-all.ru/3.13/library/stdtypes.html#bytes.splitlines) для дополнительного применения.959960**аннотация переменной**961962[Аннотация](https://python-all.ru/3.13/glossary.html#term-annotation) переменной или атрибута класса.963964При аннотировании переменной или атрибута класса присваивание необязательно:965966```python967class C:968 field: 'annotation'969```970971Аннотации переменных обычно используются для [подсказок типа](https://python-all.ru/3.13/glossary.html#term-type-hint): например, эта переменная должна принимать значения [`int`](https://python-all.ru/3.13/library/functions.html#int):972973```python974count: int = 0975```976977Синтаксис аннотаций переменных описан в разделе [Аннотированные операторы присваивания](https://python-all.ru/3.13/reference/simple_stmts.html#annassign).978979См. [аннотацию функции](https://python-all.ru/3.13/glossary.html#term-function-annotation), [**PEP 484**](https://python-all.ru/3.13/glossary.html) и [**PEP 526**](https://python-all.ru/3.13/glossary.html), в которых описывается эта функциональность. Также см. [Рекомендации по работе с аннотациями](https://python-all.ru/3.13/howto/annotations.html#annotations-howto) для лучших практик работы с аннотациями.980981**виртуальное окружение**982983Кооперативно изолированная среда выполнения, которая позволяет пользователям Python и приложениям устанавливать и обновлять пакеты распространения Python, не влияя на поведение других приложений Python, запущенных в той же системе.984985См. также [`venv`](https://python-all.ru/3.13/library/venv.html#module-venv).986987**виртуальная машина**988989Компьютер, полностью определённый в программном обеспечении. Виртуальная машина Python выполняет [байт-код](https://python-all.ru/3.13/glossary.html#term-bytecode), генерируемый компилятором байт-кода.990991**оператор моржа**992993Шутливое название оператора [присваивания в выражении](https://python-all.ru/3.13/reference/expressions.html#assignment-expressions) `:=`, поскольку он немного похож на моржа, если повернуть голову.994995**Дзен Python**996997Перечень принципов проектирования и философии Python, полезных для понимания и использования языка. Этот перечень можно найти, введя “`import this`” в интерактивном приглашении.998