Глоссарий

>>>

Стандартная подсказка Python в оболочке interactive. Часто используется для примеров кода, которые могут быть выполнены интерактивно в интерпретаторе.

...

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

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

  • Встроенная константа Ellipsis.

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

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

аннотация

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

Аннотации локальных переменных не могут быть доступны во время выполнения, но аннотации глобальных переменных, атрибутов классов и функций хранятся в специальном атрибуте __annotations__ модулей, классов и функций соответственно.

Смотрите variable annotation, function annotation, PEP 484 и PEP 526, где описана эта функциональность. Также смотрите Лучшие практики использования аннотаций, где описаны лучшие практики работы с аннотациями.

аргумент

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

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

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

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

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

См. также запись в глоссарии parameter, вопросы FAQ по the difference between arguments and parameters и PEP 362.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

атрибут

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

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

в ожидании

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

BDFL

Benevolent Dictator For Life, он же Guido van Rossum, создатель Python.

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

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

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

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

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

Вызов Py_INCREF() на borrowed reference рекомендуется для преобразования его в strong reference in-place, за исключением случаев, когда объект не может быть уничтожен до последнего использования заимствованной ссылки. Функция Py_NewRef() может быть использована для создания нового strong reference.

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

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

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

байткод

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

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

вызываемый

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

callable(argument1, argument2, argumentN)

Метод function и, соответственно, method являются вызываемыми. Экземпляр класса, реализующего метод __call__(), также является вызываемым.

обратный вызов

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

класс

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

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

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

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

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

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

Объект, который управляет окружением, отображаемым в операторе with, определяя методы __enter__() и __exit__(). См. PEP 343.

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

Переменная, которая может иметь различные значения в зависимости от контекста. Это похоже на Thread-Local Storage, в котором каждый поток выполнения может иметь разное значение для переменной. Однако в случае контекстных переменных в одном потоке выполнения может быть несколько контекстов, и основное использование контекстных переменных - это отслеживание переменных в параллельных асинхронных задачах. См. contextvars.

смежные

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

coroutine

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

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

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

CPython

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

декоратор

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

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

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

@staticmethod
def f(arg):
    ...

Аналогичная концепция существует и для классов, но используется реже. Подробнее о декораторах см. в документации к function definitions и class definitions.

дескриптор

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

Для получения дополнительной информации о методах дескрипторов смотрите Реализация дескрипторов или 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). См. Объекты словарного представления.

docstring

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

утка-типография

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

EAFP

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

выражение

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

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

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

f-строка

Строковые литералы с префиксом 'f' или 'F' принято называть «f-строками», что является сокращением от formatted string literals. См. также PEP 498.

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

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

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

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

Синоним для file object.

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

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

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

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

Конфигурация filesystem encoding and error handler задается при запуске Python функцией PyConfig_Read(): см. члены filesystem_encoding и filesystem_errors в PyConfig.

См. также locale encoding.

искатель

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

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

Более подробную информацию см. в разделах Система импорта и importlib.

деление пола

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

бесплатная заправка

Потоковая модель, при которой несколько потоков могут одновременно выполнять байткод Python в одном и том же интерпретаторе. В отличие от global interpreter lock, которая позволяет только одному потоку выполнять байткод Python одновременно. См. PEP 703.

функция

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

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

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

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

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

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

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

__будущее__

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

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

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

генератор

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

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

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

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

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

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

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

>>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
285
общая функция

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

См. также запись в глоссарии single dispatch, декоратор functools.singledispatch() и PEP 443.

общий тип

Параметр type, который может быть параметризован; обычно это container class, например list или dict. Используется для type hints и annotations.

Подробнее см. в разделах generic alias types, PEP 483, PEP 484, PEP 585 и модуль typing.

ГИЛ

См. global interpreter lock.

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

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

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

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

хэш-ориентированный pyc

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

хэшируемый

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

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

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

IDLE

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

бессмертный

Если объект бессмертен, количество его ссылок никогда не изменяется, и, следовательно, он никогда не деаллоцируется.

Встроенные строки и синглтоны являются бессмертными объектами. Например, синглтоны True и None бессмертны.

Дополнительные сведения см. в разделе PEP 683 – Immortal Objects, Using a Fixed Refcount.

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

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

путь импорта

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

Импорт

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

импортер

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

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

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

интерпретировано

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

отключение переводчика

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

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

итерируемый

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

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

итератор

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

Более подробную информацию можно найти в Типы итераторов.

Детали реализации CPython: CPython не последовательно применяет требование, чтобы итератор определял __iter__().

ключевая функция

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

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

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

ключевой аргумент

См. argument.

лямбда

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

LBYL

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

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

список

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

понимание списка

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

погрузчик

Объект, загружающий модуль. Он должен определять метод с именем load_module(). Загрузчик обычно возвращается с помощью finder. Подробности см. в разделе PEP 302, а importlib.abc.Loader - в разделе abstract base class.

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

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

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

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

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

См. также filesystem encoding and error handler.

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

Неофициальный синоним special method.

картирование

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

поиск мета-пути

Поиск finder, возвращаемый при поиске sys.meta_path. Метапоисковики путей связаны с path entry finders, но отличаются от него.

Методы, которые реализуют мета-поисковики путей, см. в разделе importlib.abc.MetaPathFinder.

метакласс

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

Более подробную информацию можно найти в Метаклассы.

метод

Функция, определяемая внутри тела класса. Если вызвать ее как атрибут экземпляра этого класса, то метод получит объект экземпляра в качестве своего первого argument (который обычно называется self). См. function и nested scope.

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

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

модуль

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

См. также package.

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

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

ТОИР

См. method resolution order.

изменяемый

Мутабельные объекты могут менять свое значение, но сохранять id(). См. также immutable.

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

Термин «именованный кортеж» применяется к любому типу или классу, который наследуется от 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(). Последние методы также добавляют некоторые дополнительные методы, которые не могут быть найдены в написанных вручную или встроенных именованных кортежах.

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

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

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

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

См. также module.

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

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

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

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

объект

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

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

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

пакет

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

См. также regular package и namespace package.

параметр

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

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

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

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

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

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

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

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

вход в тракт

Одно место на import path, к которому обращается path based finder для поиска модулей для импорта.

поиск входа по пути

finder, возвращаемый вызываемым модулем на sys.path_hooks (т.е. path entry hook), который знает, как найти модули, заданные path entry.

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

входной крючок

Вызываемый модуль на списке sys.path_hooks, который возвращает path entry finder, если он знает, как найти модули на определенном path entry.

поиск по пути

Один из стандартных meta path finders, который ищет модули в import path.

объект, похожий на тропинку

Объект, представляющий путь к файловой системе. Объект типа path - это либо объект 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.

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

См. argument.

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

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

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

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

предварительный пакет

См. provisional API.

Python 3000

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

Пифоническая

Идея или фрагмент кода, который в точности повторяет наиболее распространенные идиомы языка 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'
счётчик ссылок

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

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

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

См. также namespace package.

REPL

Акроним для «цикла чтения-вычисления-печати», другое название оболочки интерпретатора interactive.

__слоты__

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

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

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

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

понимание набора

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

разовая отправка

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

нарезать

Объект, обычно содержащий часть sequence. Слайс создается с использованием подписной нотации, [] с двоеточиями между числами, если их несколько, как, например, в variable_name[1:3:5]. В скобочной (подстрочной) нотации внутренне используются объекты slice.

мягкий устаревший

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

Основное различие между «мягкой» и (обычной) «жесткой» депривацией заключается в том, что мягкая депривация не подразумевает запланированного удаления устаревшего API.

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

См. PEP 387: Soft Deprecation.

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

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

заявление

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

статическая проверка типов

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

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

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

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

См. также borrowed reference.

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

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

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

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

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

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

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

строка с тройными кавычками

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

тип

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

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

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

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

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, где описана эта функциональность.

подсказка

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

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

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

Смотрите typing и PEP 484, где описана эта функциональность.

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

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

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

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

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

class C:
    field: 'annotation'

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

count: int = 0

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

Смотрите function annotation, PEP 484 и PEP 526, где описана эта функциональность. Также смотрите Лучшие практики использования аннотаций, где описаны лучшие практики работы с аннотациями.

виртуальная среда

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

См. также venv.

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

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

Дзен питона

Список принципов и философий проектирования Python, полезных для понимания и использования языка. Список можно найти, набрав «import this» в интерактивной подсказке.