Spec-Zone.ru › Python 3.14

Глоссарий

>>>

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

...

Может означать:

  • Приглашение Python по умолчанию в интерактивной оболочке при вводе кода для блока с отступом, внутри пары соответствующих друг другу левого и правого разделителей (круглых, квадратных или фигурных скобок либо тройных кавычек) или после указания декоратора.
  • Форма из трёх точек объекта Ellipsis.
abstract base class

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

annotate function

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

annotation

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

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

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

argument

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

  • именованный аргумент: аргумент, перед которым в вызове функции стоит идентификатор (например, 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.

asynchronous context manager

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

asynchronous generator

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

asynchronous generator function

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

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

asynchronous generator iterator

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

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

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

asynchronous iterable

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

asynchronous iterator

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

atomic operation

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

attached thread state

Состояние потока, активное для текущего потока ОС.

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

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

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

attribute

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

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

awaitable

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

BDFL

Благожелательный диктатор на всю жизнь (Benevolent Dictator For Life), он же Гвидо ван Россум, создатель Python.

binary file

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

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

borrowed reference

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

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

bytes-like object

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

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

bytecode

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

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

callable

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

callable(argument1, argument2, argumentN)

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

callback

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

class

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

class variable

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

closure variable

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

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

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

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

complex number

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

concurrency

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

concurrent modification

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

context

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

  • Временное состояние или окружение, устанавливаемое менеджером контекста с помощью оператора with.
  • Набор связей «ключ—значение», связанных с определённым объектом contextvars.Context и доступных через объекты ContextVar. См. также переменную контекста.
  • Объект contextvars.Context. См. также текущий контекст.
context management protocol

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

context manager

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

context variable

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

contiguous

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

coroutine

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

coroutine function

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

CPython

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

current context

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

cyclic isolate

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

data race

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

deadlock

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

decorator

Функция, возвращающая другую функцию; обычно она применяется для преобразования функции с использованием синтаксиса @wrapper. Типичные примеры декораторов — @classmethod и @staticmethod.

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

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

@staticmethod
def f(arg):
    ...

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

descriptor

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

Дополнительные сведения о методах дескрипторов см. в разделах Реализация дескрипторов и Руководство по дескрипторам.

dictionary

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

dictionary comprehension

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

dictionary view

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

docstring

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

duck-typing

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

dunder

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

EAFP

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

evaluate function

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

expression

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

extension module

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

f-string
f-strings

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

file object

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

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

file-like object

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

filesystem encoding and error handler

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

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

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

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

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

finder

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

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

Подробные сведения см. в разделах Искатели и загрузчики и importlib.

floor division

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

free threading

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

free-threaded build

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

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

free variable

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

function

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

function annotation

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

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

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

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

См. аннотацию переменной и PEP 484, где описана эта возможность. Рекомендации по работе с аннотациями см. также в разделе Рекомендации по работе с аннотациями.

__future__

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

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
garbage collection

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

generator

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

generator function

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

generator iterator

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

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

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

generator expression

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

>>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
285
generic function

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

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

generic type

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

Дополнительные сведения см. в разделе Обобщённые псевдонимы типов, в документах PEP 483, PEP 484, PEP 585 и в модуле typing.

GIL

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

global interpreter lock

Механизм, используемый интерпретатором 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. Это подразумевает наличие присоединённого состояния потока.

global state

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

hash-based pyc

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

hashable

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

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

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

IDLE

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

immortal

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

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

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

immutable

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

import path

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

importing

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

importer

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

index

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

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

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

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

interactive

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

interpreted

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

interpreter shutdown

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

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

iterable

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

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

iterator

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

Дополнительную информацию см. в разделе Типы итераторов.

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

key

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

key function

Ключевая функция, или функция сортировки, — это вызываемый объект, возвращающий значение, используемое для сортировки или упорядочивания. Например, 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() — это три конструктора ключевых функций. Примеры создания и использования ключевых функций см. в руководстве Практическое руководство по сортировке.

keyword argument

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

lambda

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

LBYL

«Сначала посмотри, потом действуй». При таком стиле программирования перед вызовом или поиском явно проверяются предварительные условия. Этот стиль противопоставляется подходу EAFP и характеризуется наличием множества инструкций if.

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

lexical analyzer

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

list

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

list comprehension

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

lock

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

lock-free

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

loader

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

  • Механизмы поиска и загрузчики
  • importlib.abc.Loader
  • PEP 302
locale encoding

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

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

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

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

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

magic method

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

mapping

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

meta path finder

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

Описание методов, реализуемых механизмами поиска по метапути, см. в документации importlib.abc.MetaPathFinder.

metaclass

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

Дополнительную информацию см. в разделе Метаклассы.

method

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

method resolution order

Порядок разрешения методов — это порядок, в котором при поиске выполняется поиск члена в базовых классах. Подробное описание алгоритма, используемого интерпретатором Python начиная с версии 2.3, см. в разделе Порядок разрешения методов в Python 2.3.

module

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

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

module spec

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

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

MRO

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

mutable

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

named tuple

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

К именованным кортежам относятся несколько встроенных типов, в том числе значения, возвращаемые функциями time.localtime() и os.stat(). Ещё один пример — sys.float_info:

>>> sys.float_info[1]                   # indexed access
1024
>>> sys.float_info.max_exp              # named field access
1024
>>> isinstance(sys.float_info, tuple)   # kind of tuple
True

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

namespace

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

namespace package

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

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

Дополнительные сведения см. в PEP 420 и разделе Пространства имён пакетов.

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

native code

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

nested scope

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

new-style class

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

non-deterministic

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

object

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

optimized scope

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

optional module

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

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

package

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

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

parallelism

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

parameter

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

  • позиционный или именованный: задаёт аргумент, который можно передать как позиционно, так и в виде именованного аргумента. Это вид параметра по умолчанию; например, 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.

per-object lock

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

path entry

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

path entry finder

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

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

path entry hook

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

path based finder

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

path-like object

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

PEP

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

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

См. PEP 1.

portion

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

positional argument

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

provisional API

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

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

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

provisional package

См. предварительный API.

Python 3000

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

Pythonic

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

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

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

for piece in food:
    print(piece)
qualified name

Имя с точками, показывающее «путь» от глобальной области видимости модуля к определённому в нём классу, функции или методу, как описано в 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'
race condition

Состояние программы, при котором её поведение зависит от относительной последовательности или времени наступления событий, особенно в многопоточных программах. Состояния гонки могут приводить к недетерминированному поведению и ошибкам, которые трудно воспроизвести. Гонка данных — это особый вид состояния гонки, связанный с несинхронизированным доступом к общей памяти. Стиль программирования LBYL особенно подвержен состояниям гонки в многопоточном коде. Использование блокировок и других примитивов синхронизации помогает предотвратить состояния гонки.

reference count

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

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

regular package

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

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

reentrant

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

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

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

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

REPL

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

__slots__

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

sequence

Итерируемый объект, который поддерживает эффективный доступ к элементам по целочисленным индексам с помощью специального метода __getitem__() и определяет метод __len__(), возвращающий длину последовательности. К встроенным типам последовательностей относятся list, str, tuple и bytes. Обратите внимание, что dict также поддерживает __getitem__() и __len__(), но считается отображением, а не последовательностью, поскольку для поиска используются произвольные хешируемые ключи, а не целые числа.

Абстрактный базовый класс collections.abc.Sequence определяет гораздо более широкий интерфейс, выходящий за рамки __getitem__() и __len__(): он добавляет count(), index(), __contains__() и __reversed__(). Типы, реализующие этот расширенный интерфейс, можно зарегистрировать явно с помощью register(). Дополнительную документацию о методах последовательностей в целом см. в разделе Общие операции с последовательностями.

set comprehension

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

single dispatch

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

slice

Объект типа slice, используемый для описания части последовательности. Объект-срез создаётся при использовании формы среза в нотации индексации — с двоеточиями в квадратных скобках, например variable_name[1:3:5].

soft deprecated

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

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

См. PEP 387: мягкое устаревание.

special method

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

standard library

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

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

statement

Инструкция — это часть составной инструкции (или «блока» кода). Инструкция представляет собой либо выражение, либо одну из нескольких конструкций с ключевым словом, например if, while или for.

static type checker

Внешний инструмент, который читает и анализирует код Python в поиске проблем, например неверно указанных типов. См. также подсказки типов и модуль typing.

stdlib

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

steal

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

Полное объяснение см. в разделе Подробные сведения о подсчёте ссылок.

strong reference

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

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

См. также заимствованная ссылка.

subscript

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

synchronization primitive

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

t-string
t-strings

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

text encoding

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

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

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

text file

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

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

thread state

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

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

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

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

Дополнительные сведения см. в разделе Состояние потока и глобальная блокировка интерпретатора.

thread-safe

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

token

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

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

triple-quoted string

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

type

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

type alias

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

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

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.

type hint

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

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

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

Описание этой функциональности см. в typing и PEP 484.

universal newlines

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

variable annotation

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

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

class C:
    field: 'annotation'

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

count: int = 0

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

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

virtual environment

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

См. также venv.

virtual machine

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

walrus operator

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

Zen of Python

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

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/glossary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API