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

ГлоссарийGlossary

>>>

Стандартное приглашение Python ввода в интерактивной оболочке. Часто встречается в примерах кода, которые можно выполнять интерактивно в интерпретаторе.

...

Может относиться к:

  • Стандартное приглашение Python ввода в интерактивной оболочке при вводе кода для блока с отступом, при нахождении внутри пары соответствующих левого и правого разделителей (круглых скобок, квадратных скобок, фигурных скобок или тройных кавычек), или после указания декоратора.

  • Форма из трёх точек объекта Ellipsis.

абстрактный базовый класс

Абстрактные базовые классы дополняют утиную типизацию, предоставляя способ определения интерфейсов, когда другие подходы, такие как hasattr(), были бы неуклюжими или вводили бы в заблуждение (например, с магическими методами). ABC вводят виртуальные подклассы – классы, которые не наследуются от данного класса, но всё равно распознаются функциями isinstance() и issubclass(); см. документацию модуля abc. Python поставляется со многими встроенными ABC для структур данных (в модуле collections.abc), чисел (в модуле numbers), потоков (в модуле io), искателей и загрузчиков импорта (в модуле importlib.abc). Можно создавать собственные ABC с помощью модуля abc.

функция аннотации

Вызываемый объект, который можно вызвать для получения аннотаций объекта. Функции аннотации обычно являются функциями, автоматически генерируемыми как атрибут __annotate__ функций, классов и модулей. Функции аннотации являются подмножеством вычисляющих функций.

аннотация

Метка, связанная с переменной, атрибутом класса, параметром функции или возвращаемым значением, используемая по соглашению как подсказка типа.

Аннотации локальных переменных недоступны во время выполнения, но аннотации глобальных переменных, атрибутов классов и функций можно получить, вызвав annotationlib.get_annotations() для модулей, классов и функций соответственно.

См. аннотация переменной, аннотация функции, PEP 484, PEP 526 и PEP 649, описывающие эту функциональность. Также см. Рекомендации по использованию аннотаций для лучших практик работы с аннотациями.

аргумент

Значение, передаваемое функции (или методу) при вызове функции. Существует два вида аргументов:

  • именованный аргумент: аргумент, перед которым стоит идентификатор (например, name=) в вызове функции или переданный как значение в словаре перед **. Например, 3 и 5 оба являются именованными аргументами в следующих вызовах complex():

    complex(real=3, imag=5)
    complex(**{'real': 3, 'imag': 5})
    
  • позиционный аргумент: аргумент, не являющийся именованным. Позиционные аргументы могут находиться в начале списка аргументов и/или передаваться как элементы итерируемого объекта перед *. Например, 3 и 5 оба являются позиционными аргументами в следующих вызовах:

    complex(3, 5)
    complex(*(3, 5))
    

Аргументы присваиваются именованным локальным переменным в теле функции. См. раздел Вызовы для правил, регулирующих это присваивание. Синтаксически для представления аргумента можно использовать любое выражение; вычисленное значение присваивается локальной переменной.

См. также запись глоссария параметр, вопрос FAQ о различии между аргументами и параметрами, и PEP 362.

асинхронный менеджер контекста

Объект, управляющий окружением в операторе async with путём определения методов __aenter__() и __aexit__(). Введён в PEP 492.

асинхронный генератор

Неформально используется для обозначения как асинхронной генераторной функции, так и итератора асинхронного генератора, в зависимости от контекста. Формальные термины асинхронная генераторная функция и итератор асинхронного генератора на практике редко используются; «асинхронный генератор» почти всегда достаточно.

асинхронная генераторная функция

Функция, возвращающая итератор асинхронного генератора. Она похожа на корутинную функцию, определённую с async def, за исключением того, что содержит выражения yield для получения последовательности значений, используемых в цикле async for. См. PEP 525.

Асинхронная генераторная функция может содержать выражения await, а также async for и операторы async with.

итератор асинхронного генератора

Объект, создаваемый асинхронной генераторной функцией.

Это асинхронный итератор, который при вызове метода __anext__() возвращает ожидаемый объект, выполняющий тело асинхронной генераторной функции до следующего выражения yield.

Каждое yield временно приостанавливает обработку, запоминая состояние выполнения (включая локальные переменные и ожидающие try-конструкции). Когда итератор асинхронного генератора эффективно возобновляется с другим ожидаемым объектом, возвращаемым __anext__(), он продолжает с того места, где остановился. См. PEP 492 и PEP 525.

асинхронный итерируемый объект

Объект, который можно использовать в операторе async for. Из своего метода __aiter__() должен возвращать асинхронный итератор. Введён PEP 492.

асинхронный итератор

Объект, реализующий методы __aiter__() и __anext__(). Метод __anext__() должен возвращать ожидаемый объект. async for разрешает ожидаемые объекты, возвращаемые методом __anext__() асинхронного итератора, пока не возникнет исключение StopAsyncIteration. Введён PEP 492.

атомарная операция

Операция, которая выполняется как единый неделимый шаг: ни один другой поток не может наблюдать её в незавершённом виде, а все её эффекты становятся видны сразу. Python не гарантирует атомарность высокоуровневых операторов (например, x += 1 выполняет несколько байткод-инструкций и не является атомарным). Атомарность гарантируется только там, где это явно указано. См. также состояние гонки и гонка данных.

присоединённое состояние потока

Состояние потока, активное для текущего потока операционной системы.

Когда состояние потока присоединено, поток ОС получает доступ ко всему Python C API и может безопасно вызывать интерпретатор байткода.

Если функция явно не указывает иное, попытка вызова C API без присоединённого состояния потока приводит к фатальной ошибке или неопределённому поведению. Состояние потока можно присоединять и отсоединять явно, используя C API, или неявно – средой выполнения, в том числе во время блокирующих вызовов на C и интерпретатором байткода между вызовами.

В большинстве сборок Python наличие присоединённого состояния потока означает, что вызывающий код удерживает GIL для текущего интерпретатора, поэтому одновременно только один поток ОС может иметь присоединённое состояние потока. В сборках со свободной потоковой обработкой Python потоки могут одновременно иметь присоединённое состояние потока, что допускает истинный параллелизм интерпретатора байткода.

атрибут

Значение, связанное с объектом, которое обычно обозначается именем через точечную запись. Например, если объект o имеет атрибут a, к нему обращаются как o.a.

Объекту можно присвоить атрибут, имя которого не является идентификатором, как определено в Имена (идентификаторы и ключевые слова), например с помощью setattr(), если объект это позволяет. Такой атрибут будет недоступен через точечную запись; вместо этого его нужно будет получить с помощью getattr().

ожидаемый объект

Объект, который можно использовать в выражении await. Это может быть корутина или объект с методом __await__(). См. также PEP 492.

BDFL

Доброжелательный диктатор на всю жизнь, также известный как Гвидо ван Россум, создатель Python.

двоичный файл

Файловый объект, который может читать и записывать байтоподобные объекты. Примерами двоичных файлов являются файлы, открытые в двоичном режиме ('rb', 'wb' или 'rb+'), sys.stdin.buffer, sys.stdout.buffer, а также экземпляры io.BytesIO и gzip.GzipFile.

См. также текстовый файл – файловый объект, который может читать и записывать объекты str.

заимствованная ссылка

В C API Python заимствованная ссылка – это ссылка на объект, при которой использующий объект код не владеет ссылкой. Она становится висячим указателем, если объект уничтожен. Например, сборка мусора может удалить последнюю сильную ссылку на объект и тем самым уничтожить его.

Рекомендуется вызывать Py_INCREF() для заимствованной ссылки, чтобы преобразовать её в сильную ссылку на месте, за исключением случаев, когда объект не может быть уничтожен до последнего использования заимствованной ссылки. Функция Py_NewRef() позволяет создать новую сильную ссылку.

байтоподобный объект

Объект, поддерживающий протокол буфера и способный экспортировать C-непрерывный буфер. Сюда входят все объекты bytes, bytearray и array.array, а также многие распространённые объекты memoryview. Байтоподобные объекты могут использоваться в различных операциях с двоичными данными: сжатие, сохранение в двоичный файл, отправка через сокет.

Некоторым операциям требуются изменяемые двоичные данные. В документации они часто называются «байтоподобные объекты для чтения и записи». Примерами изменяемых буферных объектов являются bytearray и memoryview объекта bytearray. Другие операции требуют хранения двоичных данных в неизменяемых объектах («байтоподобные объекты только для чтения»); примеры включают bytes и memoryview объекта bytes.

байткод

Исходный код Python компилируется в байткод – внутреннее представление программы Python в интерпретаторе CPython. Байткод также кэшируется в файлах .pyc, чтобы при повторном выполнении того же файла работа происходила быстрее (повторная компиляция из исходного кода в байткод не требуется). Этот «промежуточный язык», как говорят, выполняется на виртуальной машине, которая исполняет машинный код, соответствующий каждому байткоду. Следует отметить, что байткоды не должны работать в разных виртуальных машинах Python и не обязаны быть стабильными между версиями Python.

Список инструкций байткода можно найти в документации модуля dis.

вызываемый объект

Вызываемый объект – это объект, который можно вызвать, возможно с набором аргументов (см. аргумент), с помощью следующего синтаксиса:

callable(argument1, argument2, argumentN)

Функция, а по расширению и метод, является вызываемым объектом. Экземпляр класса, реализующего метод __call__(), также является вызываемым объектом.

колбэк

Функция-подпрограмма, передаваемая в качестве аргумента для выполнения в некоторый момент в будущем.

класс

Шаблон для создания пользовательских объектов. Определения классов обычно содержат определения методов, которые работают с экземплярами класса.

переменная класса

Переменная, определенная в классе и предназначенная для изменения только на уровне класса (т.е. не в экземпляре класса).

переменная замыкания

Свободная переменная свободная переменная, на которую ссылаются из вложенной области видимости, определенной во внешней области видимости, а не разрешаемой во время выполнения из глобальных или встроенных пространств имен. Может быть явно определена с помощью ключевого слова nonlocal для разрешения записи или неявно определена, если переменная только читается.

Например, в функции inner в следующем коде обе x и print являются свободными переменными, но только x является переменной замыкания:

def outer():
    x = 0
    def inner():
        nonlocal x
        x += 1
        print(x)
    return inner

Из-за атрибута codeobject.co_freevars (который, несмотря на свое название, только включает имена переменных замыкания, а не перечисляет все ссылочные свободные переменные), более общий термин свободная переменная иногда используется даже когда подразумеваются именно переменные замыкания.

комплексное число

Расширение привычной системы действительных чисел, в котором все числа выражаются как сумма действительной и мнимой частей. Мнимые числа – это действительные кратные мнимой единицы (квадратный корень из -1), часто обозначаемой i в математике или j в инженерии. Python имеет встроенную поддержку комплексных чисел, которые записываются в этой последней нотации; мнимая часть записывается с суффиксом j, например, 3+1j. Чтобы получить доступ к комплексным аналогам модуля math, используйте cmath. Использование комплексных чисел – довольно продвинутая математическая возможность. Если нет очевидной необходимости в них, их почти наверняка можно безопасно игнорировать.

конкурентность

Способность компьютерной программы выполнять несколько задач одновременно. Python предоставляет библиотеки для написания программ, использующих различные формы конкурентности. asyncio – это библиотека для работы с асинхронными задачами и корутинами. threading предоставляет доступ к потокам операционной системы, а multiprocessing – к процессам операционной системы. Многоядерные процессоры могут выполнять потоки и процессы на разных ядрах CPU одновременно (см. параллелизм).

конкурентное изменение

Когда несколько потоков одновременно изменяют общие данные. Конкурентное изменение без надлежащей синхронизации может вызывать состояния гонки, а также может спровоцировать гонку данных, повреждение данных или и то, и другое.

контекст

Этот термин имеет разные значения в зависимости от того, где и как используется. Некоторые распространенные значения:

протокол управления контекстом

Методы __enter__() и __exit__(), вызываемые оператором with. См. PEP 343.

менеджер контекста

Объект, реализующий протокол управления контекстом и управляющий окружением, видимым в операторе with. См. PEP 343.

контекстная переменная

Переменная, значение которой зависит от того, какой контекст является текущим контекстом. Значения доступны через объекты contextvars.ContextVar. Контекстные переменные в основном используются для изоляции состояния между конкурентными асинхронными задачами.

непрерывный

Буфер считается непрерывным, если он является либо C-непрерывным, либо непрерывным по Фортрану. Нулевые буферы являются C- и Fortran-непрерывными. В одномерных массивах элементы должны располагаться в памяти рядом друг с другом, в порядке возрастания индексов, начиная с нуля. В многомерных C-непрерывных массивах последний индекс меняется быстрее всего при обходе элементов в порядке адресов памяти. Однако в массивах, непрерывных по Фортрану, первым меняется первый индекс.

корутина

Корутины – это более обобщенная форма подпрограмм. Подпрограммы вызываются в одной точке и завершаются в другой. Корутины могут вызываться, приостанавливаться и возобновляться во многих разных точках. Они могут быть реализованы с помощью оператора async def. См. также PEP 492.

корутинная функция

Функция, возвращающая объект корутина. Корутинная функция может быть определена с помощью оператора async def и может содержать ключевые слова await, async for и async with. Они были введены в PEP 492.

CPython

Каноническая реализация языка программирования Python, распространяемая на python.org. Термин «CPython» используется, когда необходимо отличить эту реализацию от других, таких как Jython или IronPython.

текущий контекст

Контекст (объект contextvars.Context), который в данный момент используется объектами ContextVar для доступа (чтения или записи) к значениям переменных контекста. Каждый поток имеет свой собственный текущий контекст. Фреймворки для выполнения асинхронных задач (см. asyncio) связывают каждую задачу с контекстом, который становится текущим контекстом при каждом запуске или возобновлении задачи.

циклический изолят

Подгруппа из одного или нескольких объектов, которые ссылаются друг на друга в цикле ссылок, но не имеют ссылок от объектов вне группы. Цель циклического сборщика мусора – найти такие группы и разорвать циклы ссылок, чтобы память могла быть освобождена.

гонка данных

Ситуация, когда несколько потоков одновременно обращаются к одной и той же ячейке памяти, причём хотя бы одно обращение – запись, и потоки не используют никакой синхронизации для управления доступом. Гонки данных приводят к недетерминированному поведению и могут вызывать повреждение данных. Правильное использование блокировок и других примитивов синхронизации предотвращает гонки данных. Обратите внимание, что гонки данных возможны только в нативном коде, но нативный код может быть доступен через Python API. См. также состояние гонки и потокобезопасный.

взаимная блокировка

Ситуация, в которой две или более задач (потоков, процессов или корутин) бесконечно ждут друг от друга освобождения ресурсов или завершения действий, не позволяя ни одной из них продвинуться. Например, если поток A удерживает блокировку 1 и ждёт блокировку 2, а поток B удерживает блокировку 2 и ждёт блокировку 1, оба потока будут ждать бесконечно. В Python это часто возникает из-за захвата нескольких блокировок в противоречивом порядке или из-за циклических зависимостей join/await. Взаимных блокировок можно избежать, всегда захватывая несколько блокировок в одном и том же порядке. См. также блокировка и реентерабельный.

декоратор

Функция, возвращающая другую функцию, обычно применяется как преобразование функции с помощью синтаксиса @wrapper. Распространённые примеры декораторов: classmethod() и staticmethod().

Синтаксис декоратора – всего лишь синтаксический сахар, следующие два определения функций семантически эквивалентны:

def f(arg):
    ...
f = staticmethod(f)

@staticmethod
def f(arg):
    ...

Та же концепция существует и для классов, но там используется реже. См. документацию по определениям функций и определениям классов для получения дополнительной информации о декораторах.

дескриптор

Любой объект, который определяет методы __get__(), __set__() или __delete__(). Когда атрибут класса является дескриптором, его особое поведение при связывании срабатывает при поиске атрибута. Обычно при использовании a.b для получения, установки или удаления атрибута ищется объект с именем b в словаре класса для a, но если b – дескриптор, вызывается соответствующий метод дескриптора. Понимание дескрипторов – ключ к глубокому пониманию Python, так как они лежат в основе многих возможностей, включая функции, методы, свойства, методы класса, статические методы и ссылки на суперклассы.

Для получения дополнительной информации о методах дескрипторов см. Implementing Descriptors или Descriptor How To Guide.

словарь

Ассоциативный массив, в котором произвольные ключи сопоставляются со значениями. Ключами могут быть любые объекты с методами __hash__() и __eq__(). В Perl называется хешем.

словарное включение

Компактный способ обработать все или часть элементов итерируемого объекта и вернуть словарь с результатами. results = {n: n ** 2 for n in range(10)} создает словарь, содержащий ключи n, сопоставленные со значениями n ** 2. См. Отображения для списков, множеств и словарей.

представление словаря

Объекты, возвращаемые методами dict.keys(), dict.values() и dict.items(), называются представлениями словаря. Они предоставляют динамическое представление записей словаря, то есть при изменении словаря представление отражает эти изменения. Чтобы преобразовать представление словаря в обычный список, используйте list(dictview). См. Объекты представлений словаря.

докстринг

Строковый литерал, который появляется как первое выражение в классе, функции или модуле. Хотя он игнорируется при выполнении кода внутри блока, компилятор распознаёт его и помещает в атрибут __doc__ содержащего класса, функции или модуля. Поскольку к нему можно получить доступ через интроспекцию, это каноническое место для документации объекта.

утиная типизация

Стиль программирования, который не проверяет тип объекта для определения, обладает ли он нужным интерфейсом; вместо этого метод или атрибут просто вызывается или используется («Если это выглядит как утка и крякает как утка, значит, это утка»). Делая упор на интерфейсы, а не на конкретные типы, хорошо спроектированный код повышает гибкость за счёт полиморфной замены. Утиная типизация избегает проверок с помощью type() или isinstance(). (Однако утиную типизацию можно дополнить абстрактными базовыми классами.) Вместо этого она обычно использует проверки hasattr() или программирование в стиле EAFP.

дандер

Неформальное сокращение от «двойное подчёркивание», используется при обсуждении специального метода. Например, __init__ часто произносят как «дандер-инит».

EAFP

Легче попросить прощения, чем разрешения. Этот распространённый стиль программирования на Python предполагает наличие допустимых ключей или атрибутов и перехватывает исключения, если предположение оказывается неверным. Этот чистый и быстрый стиль характеризуется наличием множества операторов try и except. Этот подход противопоставляется стилю LBYL, распространённому во многих других языках, таких как C.

функция вычисления

Функция, которую можно вызвать для вычисления лениво вычисляемого атрибута объекта, например, значения псевдонимов типов, созданных с помощью оператора type.

выражение

Фрагмент синтаксиса, который можно вычислить для получения некоторого значения. Иными словами, выражение – это совокупность элементов выражения, таких как литералы, имена, доступ к атрибутам, операторы или вызовы функций, которые возвращают значение. В отличие от многих других языков, не все языковые конструкции являются выражениями. Существуют также операторы, которые не могут использоваться как выражения, например while. Присваивания также являются операторами, а не выражениями.

модуль расширения

Модуль, написанный на C или C++, использующий C API Python для взаимодействия с ядром и пользовательским кодом.

f-строка
f-строки

Строковые литералы с префиксом f или F обычно называются «f-строками», что является сокращением от форматированных строковых литералов. См. также PEP 498.

файловый объект

Объект, предоставляющий файловый API (с методами, такими как read() или write()) для нижележащего ресурса. В зависимости от способа создания, файловый объект может обеспечивать доступ к реальному файлу на диске или к другому типу хранилища или устройства связи (например, стандартный ввод/вывод, буферы в памяти, сокеты, каналы и т.д.). Файловые объекты также называются объектами, подобными файлам или потоками данных.

На самом деле существует три категории файловых объектов: необработанные двоичные файлы, буферизованные двоичные файлы и текстовые файлы. Их интерфейсы определены в модуле io. Канонический способ создания файлового объекта – использование функции open().

объект, подобный файлу

Синоним для файлового объекта.

кодировка файловой системы и обработчик ошибок

Кодировка и обработчик ошибок, используемые Python для декодирования байтов из операционной системы и кодирования Unicode в операционную систему.

Кодировка файловой системы должна гарантировать успешное декодирование всех байтов ниже 128. Если кодировка файловой системы не обеспечивает эту гарантию, функции API могут вызывать UnicodeError.

Функции sys.getfilesystemencoding() и sys.getfilesystemencodeerrors() можно использовать для получения кодировки файловой системы и обработчика ошибок.

Кодировка файловой системы и обработчик ошибок настраиваются при запуске Python функцией PyConfig_Read(): см. члены filesystem_encoding и filesystem_errors объекта PyConfig.

См. также кодировку локали.

искатель

Объект, который пытается найти загрузчик для импортируемого модуля.

Существует два типа искателей: искатели метапути для использования с sys.meta_path и искатели записей пути для использования с sys.path_hooks.

См. Искатели и загрузчики и importlib для более подробной информации.

деление с округлением вниз

Математическое деление, округляющее результат до ближайшего целого вниз. Оператор деления с округлением вниз – //. Например, выражение 11 // 4 вычисляется в 2 в отличие от 2.75, возвращаемого при истинном делении с плавающей запятой. Обратите внимание, что (-11) // 4 равно -3, потому что это -2.75, округлённое вниз. См. PEP 238.

свободная многопоточность

Модель многопоточности, в которой несколько потоков могут одновременно выполнять байт-код Python в одном интерпретаторе. Это противоположно глобальной блокировке интерпретатора, которая позволяет только одному потоку выполнять байт-код за раз. См. PEP 703.

сборка со свободной многопоточностью

Сборка CPython, поддерживающая свободную многопоточность, настраиваемая с помощью опции --disable-gil перед компиляцией.

См. Поддержку свободной многопоточности в Python.

свободная переменная

Формально, как определено в модели выполнения языка, свободная переменная – это любая переменная, используемая в пространстве имен, которая не является локальной переменной в этом пространстве имен. См. пример в переменной замыкания. На практике, из-за названия атрибута codeobject.co_freevars, этот термин также иногда используется как синоним переменной замыкания.

функция

Последовательность инструкций, которая возвращает некоторое значение вызывающему коду. В неё также можно передать ноль или более аргументов, которые могут использоваться при выполнении тела. См. также параметр, метод, и раздел Определения функций.

аннотация функции

Аннотация параметра функции или возвращаемого значения.

Аннотации функций обычно используются для подсказок типов: например, ожидается, что эта функция принимает два int аргумента, а также имеет int возвращаемое значение:

def sum_two_numbers(a: int, b: int) -> int:
   return a + b

Синтаксис аннотаций функций описан в разделе Определения функций.

См. аннотацию переменной и PEP 484, которые описывают эту функциональность. Также см. Рекомендации по аннотациям для получения лучших практик работы с аннотациями.

__future__

Future-инструкция, from __future__ import <feature>, указывает компилятору компилировать текущий модуль, используя синтаксис или семантику, которая станет стандартной в будущем релизе Python. Модуль __future__ документирует возможные значения свойства. Импортируя этот модуль и вычисляя его переменные, можно увидеть, когда новая возможность была впервые добавлена в язык и когда она станет (или стала) значением по умолчанию:

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
сборка мусора

Процесс освобождения памяти, когда она больше не используется. Python выполняет сборку мусора с помощью подсчёта ссылок и циклического сборщика мусора, который может обнаруживать и разрывать циклические ссылки. Сборщиком мусора можно управлять с помощью модуля gc.

генератор

Неформально используется для обозначения либо функции-генератора, либо итератора генератора, в зависимости от контекста. Формальные термины функция-генератор и итератор генератора на практике встречаются редко; «генератор» почти всегда достаточен.

функция-генератор

Функция, которая возвращает объект генератора. Она выглядит как обычная функция, за исключением того, что содержит выражения yield для получения серии значений, которые можно использовать в цикле for или получать по одному с помощью функции next(). См. Выражения yield.

итератор генератора

Объект, созданный функцией-генератором или генераторным выражением.

Каждое yield временно приостанавливает обработку, запоминая состояние выполнения (включая локальные переменные и ожидающие try-инструкции). Когда итератор генератора возобновляется, он продолжает с того места, где остановился (в отличие от функций, которые начинают заново при каждом вызове).

Итераторы генераторов также реализуют метод send() для отправки значения в приостановленный генератор, и метод throw() для возбуждения исключения в точке, где генератор был приостановлен. См. Методы итератора генератора.

генераторное выражение

Выражение, которое возвращает итератор. Оно выглядит как обычное выражение, за которым следует предложение for, определяющее переменную цикла, диапазон, и необязательное предложение if. Полученное выражение генерирует значения для объемлющей функции:

>>> sum(i*i for i in range(10))         # сумма квадратов 0, 1, 4, ... 81
285
обобщённая функция

Функция, состоящая из нескольких функций, реализующих одну и ту же операцию для разных типов. Какая реализация должна использоваться при вызове, определяется алгоритмом диспетчеризации.

См. также статью глоссария одиночная диспетчеризация, декоратор functools.singledispatch() и PEP 443.

обобщённый тип

Тип, который может быть параметризован; обычно это класс-контейнер, такой как list или dict. Используется для подсказок типов и аннотаций.

Для получения дополнительных сведений см. обобщённые псевдонимы типов, PEP 483, PEP 484, PEP 585 и модуль typing.

GIL

См. глобальная блокировка интерпретатора.

глобальная блокировка интерпретатора

Механизм, используемый интерпретатором CPython для обеспечения того, чтобы только один поток выполнял байт-код Python в каждый момент времени. Это упрощает реализацию CPython, делая объектную модель (включая критические встроенные типы, такие как dict) неявно безопасной при конкурентном доступе. Блокировка всего интерпретатора упрощает многопоточность интерпретатора, но ценой потери большей части параллелизма, обеспечиваемого многопроцессорными машинами.

Однако некоторые модули расширения – как стандартные, так и сторонние – спроектированы так, чтобы отпускать GIL при выполнении вычислительно интенсивных задач, таких как сжатие или хеширование. Кроме того, GIL всегда отпускается при операциях ввода-вывода.

Начиная с Python 3.13, GIL можно отключить с помощью конфигурации сборки --disable-gil. После сборки Python с этим параметром код должен выполняться с -X gil=0 или после установки переменной окружения PYTHON_GIL=0. Эта функция обеспечивает повышенную производительность многопоточных приложений и упрощает эффективное использование многоядерных процессоров. Подробнее см. PEP 703.

В предыдущих версиях C API Python функция могла объявлять, что для её использования требуется удерживать GIL. Это означает наличие присоединённого состояния потока.

глобальное состояние

Данные, доступные во всей программе, такие как переменные уровня модуля, переменные класса или статические переменные C в модулях расширения. В многопоточных программах глобальное состояние, разделяемое между потоками, обычно требует синхронизации для предотвращения состояний гонки и гонок данных.

pyc-файл на основе хеша

Файл кэша байт-кода, который использует хеш, а не время последнего изменения соответствующего исходного файла для определения своей действительности. См. Инвалидация кэшированного байт-кода.

хешируемый

Объект называется хешируемым, если он имеет хеш-значение, которое никогда не изменяется в течение его жизни (ему нужен метод __hash__()) и может сравниваться с другими объектами (ему нужен метод __eq__()). Хешируемые объекты, которые равны при сравнении, должны иметь одинаковое хеш-значение.

Хешируемость позволяет использовать объект в качестве ключа словаря и элемента множества, поскольку эти структуры данных внутренне используют хеш-значение.

Большинство неизменяемых встроенных объектов Python хешируемы; изменяемые контейнеры (например, списки или словари) – нет; неизменяемые контейнеры (например, кортежи и frozenset) хешируемы только в том случае, если их элементы хешируемы. Объекты, являющиеся экземплярами пользовательских классов, хешируемы по умолчанию. Все они не равны при сравнении (за исключением сравнения с самим собой), и их хеш-значение получается из id().

IDLE

Интегрированная среда разработки и обучения для Python. IDLE – редактор и оболочка Python – это базовый редактор и среда интерпретатора, поставляемые со стандартным дистрибутивом Python.

бессмертный

Бессмертные объекты – это деталь реализации CPython, введённая в PEP 683.

Если объект бессмертен, его счётчик ссылок никогда не изменяется, и поэтому он никогда не освобождается во время работы интерпретатора. Например, True и None являются бессмертными в CPython.

Бессмертные объекты можно определить через sys._is_immortal() или через PyUnstable_IsImmortal() в C API.

неизменяемый

Объект с фиксированным значением. Неизменяемые объекты включают числа, строки и кортежи. Такой объект нельзя изменить. Если необходимо сохранить другое значение, нужно создать новый объект. Они играют важную роль в местах, где требуется постоянное хеш-значение, например, в качестве ключа словаря. Неизменяемые объекты по своей природе потокобезопасны, поскольку их состояние нельзя изменить после создания, что устраняет опасения по поводу неправильно синхронизированной конкурентной модификации.

путь импорта

Список расположений (или записей пути), которые просматриваются искателем на основе пути для поиска модулей для импорта. Во время импорта этот список расположений обычно берётся из sys.path, но для подпакетов он также может браться из атрибута __path__ родительского пакета.

импорт

Процесс, благодаря которому код Python в одном модуле становится доступным коду Python в другом модуле.

импортёр

Объект, который одновременно находит и загружает модуль; объект, являющийся как искателем, так и загрузчиком.

индекс

Числовое значение, представляющее позицию элемента в последовательности.

В Python индексация начинается с нуля. Например, things[0] обозначает первый элемент things; things[1] – второй.

В некоторых контекстах Python допускает отрицательные индексы для отсчёта от конца последовательности, а также индексацию с помощью срезов.

См. также subscript.

интерактивный

Python имеет интерактивный интерпретатор, что означает возможность вводить операторы и выражения в приглашении интерпретатора, немедленно выполнять их и видеть результаты. Для этого достаточно запустить python без аргументов (возможно, выбрав его из главного меню компьютера). Это очень мощный способ опробовать новые идеи или изучить модули и пакеты (напомним, help(x)). Подробнее об интерактивном режиме см. Интерактивный режим.

интерпретируемый

Python является интерпретируемым языком, в отличие от компилируемых, хотя различие может быть размытым из-за наличия компилятора байткода. Это означает, что исходные файлы можно запускать напрямую, без явного создания исполняемого файла, который затем выполняется. Интерпретируемые языки обычно имеют более короткий цикл разработки/отладки, чем компилируемые, хотя их программы, как правило, выполняются медленнее. См. также интерактивный.

завершение работы интерпретатора

При запросе на завершение работы интерпретатор Python переходит в специальную фазу, на которой постепенно освобождает все выделенные ресурсы, такие как модули и различные критические внутренние структуры. Он также несколько раз вызывает сборщик мусора. Это может вызвать выполнение кода в пользовательских деструкторах или колбэках слабых ссылок. Код, выполняемый во время фазы завершения работы, может столкнуться с различными исключениями, поскольку используемые им ресурсы могут перестать работать (типичные примеры – библиотечные модули или механизм предупреждений).

Основная причина завершения работы интерпретатора – завершение выполнения __main__ модуля или запущенного скрипта.

итерируемый объект

Объект, способный возвращать свои элементы по одному. Примеры итерируемых объектов включают все типы последовательностей (такие как list, str, и tuple) и некоторые типы, не являющиеся последовательностями, такие как dict, файловые объекты, а также объекты любых классов, определённых вами с методом __iter__() или с методом __getitem__(), который реализует семантику последовательности.

Итерируемые объекты можно использовать в цикле for и во многих других местах, где требуется последовательность (zip(), map(), …). Когда итерируемый объект передаётся в качестве аргумента встроенной функции iter(), она возвращает итератор для этого объекта. Этот итератор пригоден для однократного прохода по набору значений. При работе с итерируемыми объектами обычно не требуется вызывать iter() или самостоятельно работать с объектами итераторов. Инструкция for делает это автоматически, создавая временную безымянную переменную для хранения итератора на время цикла. См. также итератор, последовательность и генератор.

итератор

Объект, представляющий поток данных. Повторные вызовы метода __next__() итератора (или передача его встроенной функции next()) возвращают последовательные элементы потока. Когда данные заканчиваются, возбуждается исключение StopIteration. После этого объект итератора исчерпан, и любой дальнейший вызов его метода __next__() снова возбуждает StopIteration. Итераторы должны иметь метод __iter__(), который возвращает сам объект итератора, поэтому каждый итератор также является итерируемым и может использоваться в большинстве мест, где принимаются другие итерируемые объекты. Одним заметным исключением является код, который пытается выполнить многократные проходы итерации. Объект-контейнер (например, list) создаёт новый итератор каждый раз, когда вы передаёте его функции iter() или используете в цикле for. Попытка сделать то же самое с итератором приведёт к возврату того же самого исчерпанного объекта итератора, использованного в предыдущем проходе, из-за чего он будет выглядеть как пустой контейнер.

Дополнительную информацию можно найти в Iterator Types.

Особенность реализации CPython: CPython не всегда последовательно применяет требование, чтобы итератор определял __iter__(). Кроме того, обратите внимание, что свободно-поточный CPython не гарантирует потокобезопасное поведение операций итератора.

ключ

Значение, идентифицирующее запись в отображении. См. также подписка.

функция-ключ

Функция-ключ или функция сортировки – это вызываемый объект, возвращающий значение, используемое для сортировки или упорядочивания. Например, locale.strxfrm() используется для создания ключа сортировки, учитывающего локальные соглашения сортировки.

Ряд инструментов в Python принимают функцию-ключ для управления порядком или группировкой элементов. К ним относятся min(), max(), sorted(), list.sort(), heapq.merge(), heapq.nsmallest(), heapq.nlargest() и itertools.groupby().

Существует несколько способов создания функции-ключа. Например, метод str.casefold() может служить функцией-ключом для сортировки без учёта регистра. В качестве альтернативы функцию-ключ можно построить из lambda-выражения, такого как lambda r: (r[0], r[2]). Кроме того, operator.attrgetter(), operator.itemgetter() и operator.methodcaller() – это три конструктора функций-ключей. Примеры создания и использования функций-ключей см. в Sorting HOW TO.

именованный аргумент

См. аргумент.

лямбда

Анонимная встроенная функция, состоящая из одного выражения, которое вычисляется при вызове функции. Синтаксис создания лямбда-функции: lambda [parameters]: expression

LBYL

Сначала проверь, потом делай (Look before you leap). Этот стиль кодирования явно проверяет предусловия перед вызовами или обращениями. Этот стиль противоположен подходу EAFP и характеризуется наличием множества инструкций if.

В многопоточной среде подход LBYL может внести риск возникновения состояния гонки между «проверкой» и «действием». Например, код if key in mapping: return mapping[key] может завершиться ошибкой, если другой поток удалит ключ из отображения после проверки, но до обращения. Эту проблему можно решить с помощью блокировок или используя подход EAFP. См. также потокобезопасность.

лексический анализатор

Формальное название для tokenizer; см. токен.

список

Встроенная последовательность Python. Несмотря на название, она больше похожа на массив в других языках, чем на связный список, поскольку доступ к элементам выполняется за O(1).

списковое включение

Компактный способ обработки всех или части элементов последовательности и возврата списка с результатами. result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] генерирует список строк, содержащих чётные шестнадцатеричные числа (0x..) в диапазоне от 0 до 255. Предложение if является необязательным. Если оно опущено, обрабатываются все элементы в range(256).

блокировка

Примитив синхронизации, который позволяет только одному потоку одновременно получать доступ к общему ресурсу. Поток должен захватить блокировку перед доступом к защищаемому ресурсу и освободить её после. Если поток пытается захватить блокировку, уже удерживаемую другим потоком, он будет заблокирован до тех пор, пока блокировка не освободится. Модуль threading языка Python предоставляет Lock (базовую блокировку) и RLock (реентерабельную блокировку). Блокировки используются для предотвращения состояний гонки и обеспечения потокобезопасного доступа к общим данным. Существуют альтернативные шаблоны проектирования, такие как очереди, модель производитель/потребитель и локальное состояние потоков. См. также взаимоблокировку и реентерабельность.

без блокировок

Операция, которая не захватывает блокировку и использует атомарные инструкции процессора для обеспечения корректности. Такие операции могут выполняться параллельно, не блокируя друг друга, и не могут быть заблокированы операциями, удерживающими блокировки. В Python с free-threaded встроенные типы, такие как dict и list, предоставляют операции чтения без блокировок, что означает, что другие потоки могут наблюдать промежуточные состояния во время многошаговых модификаций, даже если эти модификации удерживают блокировку на объект.

загрузчик

Объект, загружающий модуль. Он должен определять методы exec_module() и create_module() для реализации интерфейса Loader. Загрузчик обычно возвращается искателем. См. также:

кодировка локали

В Unix это кодировка локали LC_CTYPE. Её можно задать с помощью locale.setlocale(locale.LC_CTYPE, new_locale).

В Windows это кодовая страница ANSI (например: "cp1252").

На Android и VxWorks Python использует "utf-8" в качестве кодировки локали.

locale.getencoding() можно использовать для получения кодировки локали.

См. также кодировку файловой системы и обработчик ошибок.

магический метод

Неформальный синоним специального метода.

отображение

Контейнер, поддерживающий произвольный поиск по ключу и реализующий методы, указанные в collections.abc.Mapping или collections.abc.MutableMapping абстрактных базовых классов. Примеры включают dict, collections.defaultdict, collections.OrderedDict и collections.Counter.

мета-искатель путей

Искатель, возвращаемый поиском по sys.meta_path. Мета-искатели путей связаны с искателями записей путей, но отличаются от них.

См. importlib.abc.MetaPathFinder для получения списка методов, реализуемых мета-искателями путей.

метакласс

Класс класса. Определения классов создают имя класса, словарь класса и список базовых классов. Метакласс отвечает за приём этих трёх аргументов и создание класса. Большинство объектно-ориентированных языков программирования предоставляют реализацию по умолчанию. Особенность Python в том, что можно создавать пользовательские метаклассы. Большинству пользователей этот инструмент никогда не понадобится, но когда возникает необходимость, метаклассы могут предоставить мощные и элегантные решения. Они использовались для логирования доступа к атрибутам, добавления потокобезопасности, отслеживания создания объектов, реализации синглтонов и многих других задач.

Дополнительную информацию можно найти в Metaclasses.

метод

Функция, определённая внутри тела класса. При вызове как атрибут экземпляра этого класса метод получает объект экземпляра в качестве первого аргумента (обычно называемого self). См. функцию и вложенную область видимости.

порядок разрешения методов

Порядок разрешения методов – это порядок, в котором базовые классы просматриваются при поиске члена. Подробности алгоритма, используемого интерпретатором Python начиная с версии 2.3, см. в The Python 2.3 Method Resolution Order.

модуль

Объект, служащий организационной единицей кода Python. Модули имеют пространство имён, содержащее произвольные объекты Python. Модули загружаются в Python в процессе импортирования.

См. также пакет.

спецификация модуля

Пространство имён, содержащее информацию, связанную с импортом, используемую для загрузки модуля. Экземпляр importlib.machinery.ModuleSpec.

См. также спецификации модулей.

MRO

См. порядок разрешения методов.

изменяемый

Объект, состояние которого может изменяться в ходе выполнения программы. В многопоточных программах изменяемые объекты, разделяемые между потоками, требуют тщательной синхронизации во избежание состояний гонки. См. также неизменяемый, потокобезопасный и конкурентное изменение.

именованный кортеж

Термин «именованный кортеж» применяется к любому типу или классу, наследующему от tuple и чьи индексируемые элементы также доступны по именованным атрибутам. Такой тип или класс может иметь и другие особенности.

Несколько встроенных типов являются именованными кортежами, включая значения, возвращаемые time.localtime() и os.stat(). Другой пример – sys.float_info:

>>> sys.float_info[1]                   # доступ по индексу
1024
>>> sys.float_info.max_exp              # доступ по именованному полю
1024
>>> isinstance(sys.float_info, tuple)   # вид кортежа
True

Некоторые именованные кортежи являются встроенными типами (как в примерах выше). Альтернативно, именованный кортеж можно создать из обычного определения класса, наследующего от tuple и определяющего именованные поля. Такой класс можно написать вручную, создать наследованием от typing.NamedTuple или с помощью фабричной функции collections.namedtuple(). Последние два способа также добавляют некоторые дополнительные методы, которые могут отсутствовать в написанных вручную или встроенных именованных кортежах.

пространство имён

Место, где хранится переменная. Пространства имён реализованы как словари. Существуют локальное, глобальное и встроенное пространства имён, а также вложенные пространства имён в объектах (в методах). Пространства имён способствуют модульности, предотвращая конфликты имён. Например, функции builtins.open и os.open() различаются своими пространствами имён. Пространства имён также облегчают читаемость и поддержку, показывая, какой модуль реализует функцию. Например, запись random.seed() или itertools.islice() ясно даёт понять, что эти функции реализованы модулями random и itertools соответственно.

пакет пространства имён

Пакет, который служит только контейнером для подпакетов. Пакеты пространств имён могут не иметь физического представления и, в частности, не похожи на обычный пакет, поскольку у них нет файла __init__.py.

Пакеты пространств имён позволяют нескольким отдельно устанавливаемым пакетам иметь общий родительский пакет. В противном случае рекомендуется использовать обычный пакет.

Для получения дополнительной информации см. PEP 420 и пакеты пространств имён.

См. также модуль.

нативный код

Код, скомпилированный в машинные инструкции и выполняемый непосредственно на процессоре, в отличие от кода, который интерпретируется или выполняется в виртуальной машине. В контексте Python нативный код обычно относится к коду на C, C++, Rust или Fortran в модулях расширения, которые можно вызывать из Python. См. также модуль расширения.

вложенная область видимости

Возможность обращаться к переменной из внешнего определения. Например, функция, определённая внутри другой функции, может обращаться к переменным внешней функции. Обратите внимание: вложенные области видимости по умолчанию работают только для чтения, но не для присваивания. Локальные переменные и читаются, и записываются в самой внутренней области. Аналогично, глобальные переменные читаются и записываются в глобальном пространстве имён. nonlocal позволяет записывать во внешние области.

класс нового стиля

Старое название разновидности классов, которая теперь используется для всех объектов-классов. В более ранних версиях Python только классы нового стиля могли использовать новые универсальные возможности Python, такие как __slots__, дескрипторы, свойства, __getattribute__(), методы класса и статические методы.

недетерминированный

Поведение, при котором результат выполнения программы может различаться между запусками с одними и теми же входными данными. В многопоточных программах недетерминированное поведение часто возникает из-за состояний гонки, когда относительное время выполнения или чередование потоков влияет на результат. Правильная синхронизация с помощью блокировок и других примитивов синхронизации помогает обеспечить детерминированное поведение.

объект

Любые данные с состоянием (атрибуты или значение) и определённым поведением (методы). Также конечный базовый класс любого класса нового стиля.

оптимизированная область видимости

Область видимости, в которой имена целевых локальных переменных достоверно известны компилятору на этапе компиляции кода, что позволяет оптимизировать доступ на чтение и запись к этим именам. Локальные пространства имён функций, генераторов, корутин, включений и генераторных выражений оптимизируются таким образом. Примечание: большинство оптимизаций интерпретатора применяются ко всем областям видимости, и только те, которые полагаются на известный набор локальных и нелокальных имён переменных, ограничены оптимизированными областями.

опциональный модуль

Модуль расширения, входящий в состав стандартной библиотеки, но который может отсутствовать в некоторых сборках CPython, обычно из-за отсутствия сторонних библиотек или недоступности модуля для данной платформы.

См. Требования к опциональным модулям для списка опциональных модулей, требующих сторонние библиотеки.

пакет

Python модуль, который может содержать подмодули или рекурсивно подпакеты. Технически пакет – это модуль Python с атрибутом __path__.

См. также обычный пакет и пакет пространства имён.

параллелизм

Одновременное выполнение нескольких операций (например, на нескольких ядрах CPU). В сборках Python с глобальной блокировкой интерпретатора (GIL) только один поток выполняет байт-код Python за раз, поэтому для использования нескольких ядер CPU обычно требуются несколько процессов (например, multiprocessing) или нативные расширения, освобождающие GIL. В свободно-поточном Python несколько потоков Python могут одновременно выполнять код Python на разных ядрах.

параметр

Именованная сущность в определении функции (или метода), которая указывает на аргумент (или в некоторых случаях аргументы), который функция может принимать. Существует пять видов параметров:

  • позиционно-ключевой: указывает аргумент, который может быть передан либо позиционно, либо как именованный аргумент. Это тип параметра по умолчанию, например foo и bar в следующем примере:

    def func(foo, bar=None): ...
    
  • только позиционный: указывает аргумент, который может быть передан только по позиции. Параметры только по позиции можно определить, включив символ / в список параметров определения функции после них, например posonly1 и posonly2 в следующем примере:

    def func(posonly1, posonly2, /, positional_or_keyword): ...
    
  • только ключевой: указывает аргумент, который может быть передан только по ключевому слову. Параметры только по ключевым словам можно определить, включив один вариативно-позиционный параметр или просто * в список параметров определения функции перед ними, например kw_only1 и kw_only2 в следующем примере:

    def func(arg, *, kw_only1, kw_only2): ...
    
  • вариативно-позиционный: указывает, что может быть предоставлена произвольная последовательность позиционных аргументов (в дополнение к любым позиционным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив * перед именем параметра, например args в следующем примере:

    def func(*args, **kwargs): ...
    
  • вариативно-ключевой: указывает, что может быть предоставлено произвольно много именованных аргументов (в дополнение к любым именованным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив ** перед именем параметра, например kwargs в примере выше.

Параметры могут определять как необязательные, так и обязательные аргументы, а также значения по умолчанию для некоторых необязательных аргументов.

См. также статью глоссария аргумент, вопрос из FAQ о разнице между аргументами и параметрами, класс inspect.Parameter, раздел Определения функций и PEP 362.

блокировка на объект

Блокировка, связанная с отдельным экземпляром объекта, а не с глобальной блокировкой, общей для всех объектов. В свободно-поточном Python встроенные типы, такие как dict и list, используют блокировки на объект, чтобы разрешить параллельные операции над разными объектами, последовательно выполняя операции над одним и тем же объектом. Операции, удерживающие блокировку на объект, предотвращают выполнение других блокирующих операций над тем же объектом, но не блокируют операции без блокировки.

элемент пути

Отдельное расположение в пути импорта, которое поисковик на основе пути просматривает для поиска модулей для импорта.

поисковик элемента пути

Поисковик, возвращаемый вызываемым объектом из sys.path_hooks (т.е. перехватчиком элемента пути), который умеет находить модули по заданному элементу пути.

Методы, которые реализуют поисковики элементов пути, описаны в importlib.abc.PathEntryFinder.

перехватчик элемента пути

Вызываемый объект из списка sys.path_hooks, который возвращает поисковик элемента пути, если он умеет находить модули на конкретном элементе пути.

поисковик на основе пути

Один из поисковиков по мета-пути по умолчанию, который ищет модули в пути импорта.

объект, подобный пути

Объект, представляющий путь файловой системы. Объект, подобный пути, – это либо объект str или bytes, представляющий путь, либо объект, реализующий протокол os.PathLike. Объект, поддерживающий протокол os.PathLike, может быть преобразован в путь файловой системы str или bytes вызовом функции os.fspath(); os.fsdecode() и os.fsencode() могут использоваться для гарантированного получения результата str или bytes соответственно. Введено PEP 519.

PEP

Python Enhancement Proposal. PEP – это проектный документ, предоставляющий информацию сообществу Python или описывающий новую возможность для Python, его процессов или окружения. PEP должны содержать краткую техническую спецификацию и обоснование предлагаемых возможностей.

PEP предназначены быть основным механизмом для предложения крупных новых возможностей, сбора мнений сообщества по какому-либо вопросу и документирования проектных решений, принятых в Python. Автор PEP отвечает за достижение консенсуса в сообществе и документирование особых мнений.

См. PEP 1.

часть

Набор файлов в одном каталоге (возможно, хранящемся в zip-файле), которые входят в пакет пространства имён, как определено в PEP 420.

позиционный аргумент

См. аргумент.

временный API

Временный API – это API, который намеренно исключён из гарантий обратной совместимости стандартной библиотеки. Хотя серьёзные изменения таких интерфейсов не ожидаются, пока они помечены как временные, возможны несовместимые с предыдущими версиями изменения (вплоть до удаления интерфейса), если основные разработчики сочтут это необходимым. Такие изменения не будут вноситься без веской причины – они произойдут только в случае обнаружения серьёзных фундаментальных недостатков, которые были упущены до включения API.

Даже для временных API несовместимые с предыдущими версиями изменения рассматриваются как «крайняя мера» – по-прежнему будут предприниматься все попытки найти обратно совместимое решение для любых выявленных проблем.

Этот процесс позволяет стандартной библиотеке продолжать развиваться со временем, не закрепляя проблемные проектные ошибки на длительные периоды времени. Подробнее см. PEP 411.

временный пакет

См. временный API.

Python 3000

Прозвище для линейки релизов Python 3.x (придуманное давно, когда выход версии 3 был чем-то из далёкого будущего). Также сокращённо называется «Py3k».

Pythonic

Идея или фрагмент кода, который строго следует наиболее распространённым идиомам языка Python, а не реализует код с использованием концепций, общих для других языков. Например, распространённая идиома в Python – цикл по всем элементам итерируемого объекта с помощью оператора for. Многие другие языки не имеют такой конструкции, поэтому люди, незнакомые с Python, иногда используют вместо этого числовой счётчик:

for i in range(len(food)):
    print(food[i])

В отличие от более чистого, питоничного метода:

for piece in food:
    print(piece)
квалифицированное имя

Точечное имя, показывающее «путь» от глобальной области видимости модуля к классу, функции или методу, определённым в этом модуле, как определено в PEP 3155. Для функций и классов верхнего уровня квалифицированное имя совпадает с именем объекта:

>>> class C:
...     class D:
...         def meth(self):
...             pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__qualname__
'C.D.meth'

При использовании для ссылки на модули полностью квалифицированное имя означает полный точечный путь к модулю, включая любые родительские пакеты, например email.mime.text:

>>> import email.mime.text
>>> email.mime.text.__name__
'email.mime.text'
состояние гонки

A 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 behavior and bugs that are difficult to reproduce. A data race is a specific type of race condition involving unsynchronized access to shared memory. The LBYL coding style is particularly susceptible to race conditions in multi-threaded code. Using locks and other synchronization primitives helps prevent race conditions.

счётчик ссылок

Количество ссылок на объект. Когда счётчик ссылок объекта падает до нуля, он освобождается. Некоторые объекты являются бессмертными и имеют счётчики ссылок, которые никогда не изменяются, и поэтому эти объекты никогда не освобождаются. Подсчёт ссылок обычно не виден из кода Python, но это ключевой элемент реализации CPython. Программисты могут вызвать функцию sys.getrefcount() для получения счётчика ссылок для конкретного объекта.

В CPython счётчики ссылок не считаются стабильными или строго определёнными значениями; количество ссылок на объект и то, как на это количество влияет код Python, может различаться между версиями.

обычный пакет

Традиционный пакет, например каталог, содержащий файл __init__.py.

См. также пространство имён пакета.

реентерабельный

Свойство функции или блокировки, которое позволяет вызывать её или захватывать несколько раз одним и тем же потоком без возникновения ошибок или взаимоблокировки.

Для функций реентерабельность означает, что функция может быть безопасно вызвана снова до завершения предыдущего вызова, что важно, когда функции могут вызываться рекурсивно или из обработчиков сигналов. Потоково-небезопасные функции могут быть недетерминированными, если они вызываются реентерабельно в многопоточной программе.

Для блокировок threading.RLock (реентерабельная блокировка) в Python является реентерабельной, то есть поток, уже удерживающий блокировку, может захватить её снова без блокировки. Напротив, threading.Lock не является реентерабельной – попытка захватить её дважды из одного потока приведёт к взаимоблокировке.

См. также блокировку и взаимоблокировку.

REPL

Акроним от «read–eval–print loop» (цикл чтения-вычисления-вывода), другое название для интерактивной оболочки интерпретатора.

__slots__

Объявление внутри класса, которое экономит память, заранее выделяя место для атрибутов экземпляра и устраняя словари экземпляров. Хотя этот метод популярен, его правильное применение требует некоторой аккуратности, и его лучше использовать только в редких случаях, когда в приложении с критичной памятью создаётся большое количество экземпляров.

последовательность

An iterable which supports efficient element access using integer indices via the __getitem__() special method and defines a __len__() method that returns the length of the sequence. Some built-in sequence types are list, str, tuple, and bytes. Note that dict also supports __getitem__() and __len__(), but is considered a mapping rather than a sequence because the lookups use arbitrary hashable keys rather than integers.

The collections.abc.Sequence abstract base class defines a much richer interface that goes beyond just __getitem__() and __len__(), adding count(), index(), __contains__(), and __reversed__(). Types that implement this expanded interface can be registered explicitly using register(). For more documentation on sequence methods generally, see Common Sequence Operations.

генератор множества

Компактный способ обработать все или часть элементов итерируемого объекта и вернуть множество с результатами. results = {c for c in 'abracadabra' if c not in 'abc'} создает множество строк {'r', 'd'}. См. Отображения для списков, множеств и словарей.

одиночная диспетчеризация

A form of generic function dispatch where the implementation is chosen based on the type of a single argument.

срез

An object of type slice, used to describe a portion of a sequence. A slice object is created when using the slicing form of subscript notation, with colons inside square brackets, such as in variable_name[1:3:5].

мягкое устаревание

API с мягким устареванием не следует использовать в новом коде, но в уже существующем коде его использование безопасно. API остаётся документированным и протестированным, но не будет развиваться дальше.

Мягкое устаревание, в отличие от обычного, не предусматривает удаление API и не будет выдавать предупреждений.

См. PEP 387: Soft Deprecation.

специальный метод

A 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.

стандартная библиотека

The collection of packages, modules and extension modules 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.

См. также sys.stdlib_module_names для списка всех возможных имён модулей стандартной библиотеки.

инструкция

A statement is part of a suite (a “block” of code). A statement is either an expression or one of several constructs with a keyword, such as if, while or for.

статический анализатор типов

An external tool that reads Python code and analyzes it, looking for issues such as incorrect types. See also type hints and the typing module.

stdlib

An abbreviation of standard library.

кража (steal)

В C API Python «кража» аргумента означает, что право собственности на аргумент передаётся вызываемой функции. Вызывающий код не должен использовать эту ссылку после вызова. Обычно функции, которые «крадут» аргумент, делают это даже в случае неудачи.

See Reference Count Details for a full explanation.

сильная ссылка

В C API Python сильная ссылка – это ссылка на объект, которой владеет код, содержащий ссылку. Сильная ссылка получается вызовом Py_INCREF() при создании ссылки и освобождается с помощью Py_DECREF() при удалении ссылки.

Функцию Py_NewRef() можно использовать для создания сильной ссылки на объект. Обычно перед выходом из области видимости сильной ссылки необходимо вызвать функцию Py_DECREF() на этой сильной ссылке, чтобы избежать утечки одной ссылки.

See also borrowed reference.

индексация

Выражение в квадратных скобках в выражении индексации, например, 3 в items[3]. Обычно используется для выбора элемента контейнера. Также называется ключом при индексации отображения, или индексом при индексации последовательности.

примитив синхронизации

Базовый строительный блок для координации (синхронизации) выполнения нескольких потоков для обеспечения потокобезопасного доступа к общим ресурсам. Модуль threading в Python предоставляет несколько примитивов синхронизации, включая Lock, RLock, Semaphore, Condition, Event и Barrier. Кроме того, модуль queue предоставляет очереди с множеством производителей и потребителей, которые особенно полезны в многопоточных программах. Эти примитивы помогают предотвратить состояния гонки и координировать выполнение потоков. См. также блокировку.

t-строка
t-строки

Строковые литералы с префиксом t или T обычно называют «t-строки», что является сокращением от шаблонных строковых литералов.

кодировка текста

Строка в Python – это последовательность кодовых точек Unicode (в диапазоне U+0000U+10FFFF). Чтобы сохранить или передать строку, её необходимо сериализовать в последовательность байтов.

Сериализация строки в последовательность байтов называется «кодированием», а восстановление строки из последовательности байтов – «декодированием».

Существует множество различных кодеков для сериализации текста, которые в совокупности называются «кодировками текста».

текстовый файл

Объект файла, способный читать и записывать объекты str. Часто текстовый файл на самом деле обращается к байт-ориентированному потоку данных и автоматически обрабатывает кодировку текста. Примеры текстовых файлов: файлы, открытые в текстовом режиме ('r' или 'w'), sys.stdin, sys.stdout и экземпляры io.StringIO.

См. также двоичный файл для объекта файла, способного читать и записывать байтоподобные объекты.

состояние потока

Информация, используемая средой выполнения CPython для работы в потоке ОС. Например, включает текущее исключение (если есть) и состояние интерпретатора байт-кода.

Каждое состояние потока привязано к одному потоку ОС, но потоки могут иметь много доступных состояний потока. В каждый момент времени не более одного из них может быть присоединено.

Присоединённое состояние потока требуется для вызова большинства C API Python, если функция явно не документирует иное. Интерпретатор байт-кода выполняется только в присоединённом состоянии потока.

Каждое состояние потока принадлежит одному интерпретатору, но каждый интерпретатор может иметь много состояний потока, в том числе несколько для одного и того же потока ОС. Состояния потоков из разных интерпретаторов могут быть привязаны к одному потоку, но в любой момент времени только одно может быть присоединено в этом потоке.

См. Состояние потока и глобальная блокировка интерпретатора для получения дополнительной информации.

потокобезопасный

Модуль, функция или класс, которые корректно работают при одновременном использовании несколькими потоками. Потокобезопасный код использует соответствующие примитивы синхронизации, такие как блокировки, для защиты общего изменяемого состояния, либо спроектирован так, чтобы вообще избегать общего изменяемого состояния. В свободно-поточной сборке встроенные типы, такие как dict, list и set, используют внутреннюю блокировку, чтобы сделать многие операции потокобезопасными, хотя потокобезопасность не обязательно гарантируется. Код, не являющийся потокобезопасным, может сталкиваться с состояниями гонки и гонками данных при использовании в многопоточных программах.

токен

Маленькая единица исходного кода, генерируемая лексическим анализатором (также называется токенизатором). Имена, числа, строки, операторы, символы новой строки и подобное представляются токенами.

Модуль tokenize предоставляет лексический анализатор Python. Модуль token содержит информацию о различных типах токенов.

строка в тройных кавычках

Строка, ограниченная тремя экземплярами кавычек (”) или апострофов (‘). Хотя они не предоставляют никакой функциональности, недоступной в строках с одинарными кавычками, они полезны по ряду причин. Они позволяют включать неэкранированные одинарные и двойные кавычки внутри строки и могут занимать несколько строк без использования символа продолжения, что делает их особенно полезными при написании докстрингов.

тип

Тип объекта Python определяет, что это за объект; каждый объект имеет тип. Тип объекта доступен как его атрибут __class__ или может быть получен с помощью type(obj).

псевдоним типа

Синоним для типа, создаваемый присваиванием типа идентификатору.

Псевдонимы типов полезны для упрощения аннотаций типов. Например:

def remove_gray_shades(
        colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
    pass

можно сделать более читаемым следующим образом:

Color = tuple[int, int, int]

def remove_gray_shades(colors: list[Color]) -> list[Color]:
    pass

См. typing и PEP 484, в которых описывается эта функциональность.

подсказка типа

Аннотация, которая указывает ожидаемый тип для переменной, атрибута класса или параметра функции или возвращаемого значения.

Подсказки типа являются необязательными и не проверяются Python, но они полезны для статических анализаторов типов. Они также могут помогать IDE с автодополнением и рефакторингом.

Подсказки типа глобальных переменных, атрибутов классов и функций, но не локальных переменных, можно получить с помощью typing.get_type_hints().

См. typing и PEP 484, в которых описывается эта функциональность.

универсальные символы новой строки

Способ интерпретации текстовых потоков, при котором все следующие символы распознаются как конец строки: соглашение Unix о конце строки '\n', соглашение Windows '\r\n' и старое соглашение Macintosh '\r'. См. PEP 278 и PEP 3116, а также bytes.splitlines() для дополнительного применения.

аннотация переменной

Аннотация переменной или атрибута класса.

При аннотировании переменной или атрибута класса присваивание необязательно:

class C:
    field: 'annotation'

Аннотации переменных обычно используются для подсказок типа: например, эта переменная должна принимать значения int:

count: int = 0

Синтаксис аннотаций переменных описан в разделе Аннотированные операторы присваивания.

См. аннотацию функции, PEP 484 и PEP 526, в которых описывается эта функциональность. Также см. Рекомендации по работе с аннотациями для лучших практик работы с аннотациями.

виртуальное окружение

Кооперативно изолированная среда выполнения, которая позволяет пользователям Python и приложениям устанавливать и обновлять пакеты распространения Python, не влияя на поведение других приложений Python, запущенных в той же системе.

См. также venv.

виртуальная машина

Компьютер, полностью определённый в программном обеспечении. Виртуальная машина Python выполняет байт-код, генерируемый компилятором байт-кода.

оператор моржа

Шутливое название оператора присваивания в выражении :=, поскольку он немного похож на моржа, если повернуть голову.

Дзен Python

Перечень принципов проектирования и философии Python, полезных для понимания и использования языка. Этот перечень можно найти, введя “import this” в интерактивном приглашении.