Spec-Zone.ru › Python 3.11

Глоссарий

>>>

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

...

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

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

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

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

abstract base class

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

annotation

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

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

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

argument

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

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

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

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

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

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

asynchronous context manager

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

asynchronous generator

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

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

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

asynchronous generator iterator

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

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

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

asynchronous iterable

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

asynchronous iterator

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

attribute

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

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

awaitable

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

BDFL

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

binary file

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

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

borrowed reference

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

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

bytes-like object

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

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

bytecode

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

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

callable

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

callable(argument1, argument2, argumentN)

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

callback

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

class

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

class variable

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

complex number

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

context manager

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

context variable

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

contiguous

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

coroutine

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

coroutine function

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

CPython

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

decorator

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

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

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

@staticmethod
def f(arg):
    ...

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

descriptor

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

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

dictionary

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

dictionary comprehension

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

dictionary view

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

docstring

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

duck-typing

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

EAFP

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

expression

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

extension module

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

f-string

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

file object

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

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

file-like object

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

filesystem encoding and error handler

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

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

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

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

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

finder

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

Начиная с Python 3.3 существуют два типа искателей: искателей метапути, используемые с sys.meta_path, и искатели элементов пути, используемые с sys.path_hooks.

Подробные сведения см. в PEP 302, PEP 420 и PEP 451.

floor division

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

function

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

function annotation

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

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

def sum_two_numbers(a: int, b: int) -> int:
   return a + b
Определения функций.

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

__future__

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

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

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

generator

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

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

generator iterator

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

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

generator expression

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

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

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

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

generic type

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

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

GIL

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

global interpreter lock

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

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

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

hash-based pyc

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

hashable

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

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

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

IDLE

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

immutable

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

import path

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

importing

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

importer

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

interactive

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

interpreted

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

interpreter shutdown

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

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

iterable

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

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

iterator

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

Дополнительные сведения см. в разделе Типы итераторов.

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

key function

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

keyword argument

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

lambda

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

LBYL

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

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

list

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

list comprehension

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

loader

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

locale encoding

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

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

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

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

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

magic method

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

mapping

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

meta path finder

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

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

metaclass

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

Дополнительные сведения приведены в разделе Метаклассы.

method

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

method resolution order

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

module

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

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

module spec

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

MRO

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

mutable

Изменяемые объекты могут менять своё значение, сохраняя при этом свой id(). См. также неизменяемый.

named tuple

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

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

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

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

namespace

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

namespace package

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

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

nested scope

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

new-style class

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

object

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

package

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

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

parameter

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

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

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

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

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

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

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

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

path entry

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

path entry finder

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

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

path entry hook

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

path based finder

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

path-like object

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

PEP

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

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

См. PEP 1.

portion

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

positional argument

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

provisional API

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

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

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

provisional package

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

Python 3000

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

Pythonic

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

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

В отличие от более лаконичного, свойственного Python способа:

for piece in food:
    print(piece)
qualified name

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

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

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

>>> import email.mime.text
>>> email.mime.text.__name__
'email.mime.text'
reference count

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

regular package

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

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

__slots__

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

sequence

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

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

set comprehension

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

single dispatch

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

slice

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

special method

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

statement

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

static type checker

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

strong reference

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

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

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

text encoding

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

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

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

text file

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

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

triple-quoted string

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

type

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

type alias

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

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

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

можно записать более понятным образом:

Color = tuple[int, int, int]

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

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

type hint

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

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

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

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

universal newlines

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

variable annotation

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

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

class C:
    field: 'annotation'

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

count: int = 0

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

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

virtual environment

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

См. также venv.

virtual machine

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

Zen of Python

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

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

Spec-Zone.ru

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