Глоссарий

>>>

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

...

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

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

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

2to3

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

2to3 доступен в стандартной библиотеке как lib2to3; отдельная точка входа предоставляется как Tools/scripts/2to3. См. 2to3 — Автоматизированная трансляция кода Python 2 в 3.

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

Абстрактные базовые классы дополняют 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. Она похожа на функцию coroutine, определенную с помощью async def, за исключением того, что она содержит yield выражения для получения серии значений, используемых в цикле async for.

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

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

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

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

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

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

ожидаемый

Объект, который может быть использован в выражении 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.

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

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

Вызов Py_INCREF() на borrowed reference рекомендуется для преобразования его в strong reference на месте, за исключением случаев, когда объект не может быть уничтожен до последнего использования заимствованной ссылки. Функция 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.

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

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

класс

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

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

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

принуждение

Неявное преобразование экземпляра одного типа в другой во время операции, в которой участвуют два аргумента одного типа. Например, int(3.15) преобразует число с плавающей точкой в целое 3, но в 3+4.5 каждый аргумент имеет разный тип (один int, другой float), и оба должны быть преобразованы к одному типу, прежде чем их можно будет добавить, иначе возникнет ошибка TypeError. Без принуждения все аргументы даже совместимых типов должны быть нормализованы программистом к одному и тому же значению, например, float(3)+4.5, а не просто 3+4.5.

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

Расширение привычной системы действительных чисел, в которой все числа выражаются в виде суммы действительной и мнимой частей. Мнимые числа - это действительные кратные мнимой единицы (квадратного корня из -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. Функция 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__ окружающего класса, функции или модуля. Поскольку он доступен через интроспекцию, он является каноническим местом для документации объекта.

duck-typing

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

EAFP

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

выражение

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

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

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

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 для импортируемого модуля.

Начиная с Python 3.3, существует два типа finder: meta path finders для использования с sys.meta_path и path entry finders для использования с sys.path_hooks.

Более подробную информацию смотрите в разделах PEP 302, PEP 420 и PEP 451.

деление пола

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

функция

Серия утверждений, которая возвращает некоторое значение вызывающей стороне. Ему также может быть передано ноль или более 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-заявления). Когда итератор генератора возобновляет работу, он начинает с того места, на котором остановился (в отличие от функций, которые при каждом вызове начинают все сначала).

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

Выражение, возвращающее итератор. Оно выглядит как обычное выражение, за которым следует предложение 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 всегда освобождается при выполнении операций ввода-вывода.

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

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

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

hashable

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

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

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

IDLE

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

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

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

путь импорта

Список мест (или 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 implementation detail: 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(), itemgetter() и methodcaller(). Примеры создания и использования ключевых функций смотрите в Sorting HOW TO.

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

См. argument.

лямбда

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

LBYL

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

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

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

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

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

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

Python использует filesystem encoding and error handler для преобразования между именами файлов Unicode и именами байтов.

список

Встроенный в 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.

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

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

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

Объект-контейнер, поддерживающий произвольный поиск ключей и реализующий методы, указанные в Mapping или 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.

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

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

модуль

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

См. также package.

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

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

ТОИР

См. method resolution order.

изменяемый

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

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

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

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

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

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

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

Пакет 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_hook, который возвращает path entry finder, если он знает, как найти модули на определенном path entry.

поиск пути

Один из стандартных meta path finders, который ищет модули в import 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'
количество ссылок

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

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

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

См. также namespace package.

__слоты__

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

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

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

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

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

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

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

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

нарезать

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

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

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

заявление

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

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

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

Функция 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, но они полезны для инструментов статического анализа типов и помогают 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» в интерактивной подсказке.

Вернуться на верх