Глоссарий
*********

">>>"
   The default Python prompt of the interactive shell.  Often seen for
   code examples which can be executed interactively in the
   interpreter.

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

   * The default Python prompt of the interactive shell when entering
     the code for an indented code block, when within a pair of
     matching left and right delimiters (parentheses, square brackets,
     curly braces or triple quotes), or after specifying a decorator.

   * The "Ellipsis" built-in constant.

2to3
   A tool that tries to convert Python 2.x code to Python 3.x code by
   handling most of the incompatibilities which can be detected by
   parsing the source and traversing the parse tree.

   2to3 is available in the standard library as "lib2to3"; a
   standalone entry point is provided as "Tools/scripts/2to3".  See
   2to3 --- Automated Python 2 to 3 code translation.

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

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

   Annotations of local variables cannot be accessed at runtime, but
   annotations of global variables, class attributes, and functions
   are stored in the "__annotations__" special attribute of modules,
   classes, and functions, respectively.

   See *variable annotation*, *function annotation*, **PEP 484** and
   **PEP 526**, which describe this functionality. Also see
   Annotations Best Practices for best practices on working with
   annotations.

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

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

        complex(real=3, imag=5)
        complex(**{'real': 3, 'imag': 5})

   * *позиционный аргумент*: аргумент, который не является
     именованным. Позиционные аргументы могут находиться в начале
     списка аргументов и/или передаваться как элементы *итерируемого
     объекта*, перед которым стоит "*". Например, "3" и "5" являются
     позиционными аргументами в следующих вызовах:

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

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

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

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

асинхронный генератор
   A function which returns an *asynchronous generator iterator*.  It
   looks like a coroutine function defined with "async def" except
   that it contains "yield" expressions for producing a series of
   values usable in an "async for" loop.

   Usually refers to an asynchronous generator function, but may refer
   to an *asynchronous generator iterator* in some contexts.  In cases
   where the intended meaning isn't clear, using the full terms avoids
   ambiguity.

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

асинхронный генераторный итератор
   An object created by a *asynchronous generator* function.

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

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

асинхронный итерируемый объект
   Объект, который можно использовать в инструкции "async for". Должен
   возвращать *асинхронный итератор* из своего метода "__aiter__()".
   Представлен в **PEP 492**.

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

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

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

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

BDFL
   «Великодушный пожизненный диктатор» («Benevolent Dictator For
   Life»), он же Гвидо ван Россум, создатель Python.

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

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

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

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

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

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

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

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

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

      callable(argument1, argument2, argumentN)

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

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

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

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

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

менеджер контекста
   An object which controls the environment seen in a "with" statement
   by defining "__enter__()" and "__exit__()" methods. See **PEP
   343**.

переменная контекста
   A variable which can have different values depending on its
   context. This is similar to Thread-Local Storage in which each
   execution thread may have a different value for a variable.
   However, with context variables, there may be several contexts in
   one execution thread and the main usage for context variables is to
   keep track of variables in concurrent asynchronous tasks. See
   "contextvars".

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

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

сопрограммная функция
   Функция, возвращающая *сопрограмму*. Сопрограммная функция может
   быть определена с помощью инструкции "async def" и может содержать
   выражения "await", а также инструкции "async for" и "async with".
   Представлены в **PEP 492**.

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

декоратор
   A function returning another function, usually applied as a
   function transformation using the "@wrapper" syntax.  Common
   examples for decorators are "classmethod()" and "staticmethod()".

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

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

      @staticmethod
      def f(arg):
          ...

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

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

   Подробнее о методах дескрипторов см. раздел Implementing
   Descriptors или Практическое руководство по дескрипторам.

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

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

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

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

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

EAFP
   «Проще попросить прощения, чем разрешения» («Easier to ask for
   forgiveness than permission»). Распространённый в Python стиль
   программирования, при котором предполагается наличие допустимых
   ключей или атрибутов, а исключения перехватываются, если это
   предположение оказывается неверным. Этот чистый и быстрый стиль
   характеризуется наличием множества инструкций "try" и "except".
   Этот подход противопоставляется стилю *LBYL*, распространённому во
   многих других языках, например в C.

выражение
   A piece of syntax which can be evaluated to some value.  In other
   words, an expression is an accumulation of expression elements like
   literals, names, attribute access, operators or function calls
   which all return a value.  In contrast to many other languages, not
   all language constructs are expressions.  There are also
   *statement*s which cannot be used as expressions, such as "while".
   Assignments are also statements, not expressions.

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

f-строка
   String literals prefixed with "'f'" or "'F'" are commonly called
   "f-strings" which is short for formatted string literals.  See also
   **PEP 498**.

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

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

объект, подобный файлу
   Синоним *файлового объекта*.

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

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

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

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

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

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

   Существует два типа поисковиков: *поисковики мета-пути*,
   используемые с "sys.meta_path" и *поисковики элемента пути*,
   используемые с "sys.path_hooks".

   Подробнее см. в Finders and loaders и "importlib".

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

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

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

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

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

   Синтаксис аннотации функции описан в разделе Function definitions.

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

__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)

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

генератор
   A function which returns a *generator iterator*.  It looks like a
   normal function except that it contains "yield" expressions for
   producing a series of values usable in a for-loop or that can be
   retrieved one at a time with the "next()" function.

   Usually refers to a generator function, but may refer to a
   *generator iterator* in some contexts.  In cases where the intended
   meaning isn't clear, using the full terms avoids ambiguity.

генераторный итератор
   An object created by a *generator* function.

   Each "yield" temporarily suspends processing, remembering the
   execution state (including local variables and pending try-
   statements).  When the *generator iterator* resumes, it picks up
   where it left off (in contrast to functions which start fresh on
   every invocation).

генераторное выражение
   An expression that returns an iterator.  It looks like a normal
   expression followed by a "for" clause defining a loop variable,
   range, and an optional "if" clause.  The combined expression
   generates values for an enclosing function:

      >>> sum(i*i for i in range(10))         # сумма квадратов 0, 1, 4, ... 81
      285

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

   See also the *single dispatch* glossary entry, the
   "functools.singledispatch()" decorator, and **PEP 443**.

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

   Подробнее см. обобщённые псевдонимы типов, **PEP 483**, **PEP
   484**, **PEP 585** и модуль "typing".

GIL
   См. *глобальную блокировку интерпретатора*.

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

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

   Past efforts to create a "free-threaded" interpreter (one which
   locks shared data at a much finer granularity) have not been
   successful because performance suffered in the common single-
   processor case. It is believed that overcoming this performance
   issue would make the implementation much more complicated and
   therefore costlier to maintain.

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

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

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

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

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

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

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

неизменяемый
   An object with a fixed value.  Immutable objects include numbers,
   strings and tuples.  Such an object cannot be altered.  A new
   object has to be created if a different value has to be stored.
   They play an important role in places where a constant hash value
   is needed, for example as a key in a dictionary.

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

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

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

интерактивный
   Python has an interactive interpreter which means you can enter
   statements and expressions at the interpreter prompt, immediately
   execute them and see their results.  Just launch "python" with no
   arguments (possibly by selecting it from your computer's main
   menu). It is a very powerful way to test out new ideas or inspect
   modules and packages (remember "help(x)").

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

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

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

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

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

итератор
   An object representing a stream of data.  Repeated calls to the
   iterator's "__next__()" method (or passing it to the built-in
   function "next()") return successive items in the stream.  When no
   more data are available a "StopIteration" exception is raised
   instead.  At this point, the iterator object is exhausted and any
   further calls to its "__next__()" method just raise "StopIteration"
   again.  Iterators are required to have an "__iter__()" method that
   returns the iterator object itself so every iterator is also
   iterable and may be used in most places where other iterables are
   accepted.  One notable exception is code which attempts multiple
   iteration passes.  A container object (such as a "list") produces a
   fresh new iterator each time you pass it to the "iter()" function
   or use it in a "for" loop.  Attempting this with an iterator will
   just return the same exhausted iterator object used in the previous
   iteration pass, making it appear like an empty container.

   Больше информации можно найти в Iterator Types.

   **Деталь реализации CPython:** CPython does not consistently apply
   the requirement that an iterator define "__iter__()".

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

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

   There are several ways to create a key function.  For example. the
   "str.lower()" method can serve as a key function for case
   insensitive sorts.  Alternatively, a key function can be built from
   a "lambda" expression such as "lambda r: (r[0], r[2])".  Also,
   "operator.attrgetter()", "operator.itemgetter()", and
   "operator.methodcaller()" are three key function constructors.  See
   the Sorting HOW TO for examples of how to create and use key
   functions.

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

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

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

   In a multi-threaded environment, the LBYL approach can risk
   introducing a race condition between "the looking" and "the
   leaping".  For example, the code, "if key in mapping: return
   mapping[key]" can fail if another thread removes *key* from
   *mapping* after the test, but before the lookup. This issue can be
   solved with locks or by using the EAFP approach.

лексический анализатор
   Официальное название для *токенизатора*. См. *токен*.

список
   A built-in Python *sequence*.  Despite its name it is more akin to
   an array in other languages than to a linked list since access to
   elements is *O*(1).

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

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

   * Finders and loaders

   * "importlib.abc.Loader"

   * **PEP 302**

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

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

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

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

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

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

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

поисковик мета-пути
   *Поисковик*, возвращаемый при поиске в "sys.meta_path". Поисковики
   мета-пути связаны с *поисковиками элемента пути*, но отличаются от
   них.

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

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

   Подробнее см. Metaclasses.

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

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

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

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

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

   См. также Module specs.

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

изменяемый
   Mutable objects can change their value but keep their "id()".  See
   also *immutable*.

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

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

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

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

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

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

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

   Для получения дополнительной информации см. **PEP 420** и Namespace
   packages.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   Смотри **PEP 1**.

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

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

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

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

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

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

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

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

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

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

      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'

счётчик ссылок
   The number of references to an object.  When the reference count of
   an object drops to zero, it is deallocated.  Some objects are
   "immortal" and have reference counts that are never modified, and
   therefore the objects are never deallocated.  Reference counting is
   generally not visible to Python code, but it is a key element of
   the *CPython* implementation.  Programmers can call the
   "sys.getrefcount()" function to return the reference count for a
   particular object.

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

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

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

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

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

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

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

срез
   An object usually containing a portion of a *sequence*.  A slice is
   created using the subscript notation, "[]" with colons between
   numbers when several are given, such as in "variable_name[1:3:5]".
   The bracket (subscript) notation uses "slice" objects internally.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Color = tuple[int, int, int]

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

   См. "typing" и **PEP 484**, в которых описана эта возможность.

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

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

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

   См. "typing" и **PEP 484**, в которых описана эта возможность.

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

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

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

      class C:
          field: 'annotation'

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

      count: int = 0

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

   См. *аннотация функции*, **PEP 484** и **PEP 526**, которые
   описывают эту функциональность. См. также Annotations Best
   Practices для получения рекомендаций по работе с аннотациями.

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

   См. также "venv".

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

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