glossary.md
1> **Источник:** https://python-all.ru/3.2/glossary.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Глоссарий89**`>>>`**1011Приглашение по умолчанию в интерактивной оболочке Python. Часто встречается в примерах кода, которые можно выполнять в интерпретаторе в интерактивном режиме.1213**`...`**1415Стандартное приглашение Python интерактивной оболочки при вводе кода для блока с отступом или внутри пары соответствующих открывающих и закрывающих разделителей (круглых скобок, квадратных скобок или фигурных скобок).1617**2to3**1819Инструмент, преобразующий код Python 2.x в код Python 3.x путём обработки большинства несовместимостей, которые можно обнаружить при разборе исходного кода и обходе дерева разбора.20212to3 доступен в стандартной библиотеке как [`lib2to3`](https://python-all.ru/3.2/library/2to3.html#module-lib2to3); отдельная точка входа предоставляется как `Tools/scripts/2to3`. См. [*2to3 – автоматическое преобразование кода Python 2 в 3*](https://python-all.ru/3.2/library/2to3.html#to3-reference).2223**абстрактный базовый класс**2425Абстрактные базовые классы дополняют2627[*утиную типизацию*](https://python-all.ru/3.2/glossary.html#term-duck-typing)2829, предоставляя способ определения интерфейсов, когда другие методы, такие как3031[`hasattr()`](https://python-all.ru/3.2/library/functions.html#hasattr)3233, были бы неудобны или незаметно ошибочны (например, с3435[*магическими методами*](https://python-all.ru/3.2/reference/datamodel.html#special-lookup)3637). ABC вводят виртуальные подклассы – классы, которые не наследуют от класса, но всё равно распознаются функциями3839[`isinstance()`](https://python-all.ru/3.2/library/functions.html#isinstance)4041и4243[`issubclass()`](https://python-all.ru/3.2/library/functions.html#issubclass)4445; см. документацию модуля4647[`abc`](https://python-all.ru/3.2/library/abc.html#module-abc)4849. В Python есть много встроенных ABC для структур данных (в модуле5051[`collections`](https://python-all.ru/3.2/library/collections.html#module-collections)5253), чисел (в модуле5455[`numbers`](https://python-all.ru/3.2/library/numbers.html#module-numbers)5657), потоков (в модуле5859[`io`](https://python-all.ru/3.2/library/io.html#module-io)6061), искателей импортов и загрузчиков (в модуле6263[`importlib.abc`](https://python-all.ru/3.2/library/importlib.html#module-importlib.abc)6465). Вы можете создавать собственные ABC с помощью модуля6667[`abc`](https://python-all.ru/3.2/library/abc.html#module-abc)6869.7071**аргумент**7273Значение, передаваемое в [*функцию*](https://python-all.ru/3.2/glossary.html#term-function) (или [*метод*](https://python-all.ru/3.2/glossary.html#term-method)) при её вызове. Существует два типа аргументов:7475- *Именованный аргумент*: аргумент, перед которым стоит идентификатор (например, `name=`) в вызове функции или переданный как значение в словаре, перед которым стоит `**`. Например, `3` и `5` являются именованными аргументами в следующих вызовах [`complex()`](https://python-all.ru/3.2/library/functions.html#complex):7677 ```python78 complex(real=3, imag=5)79 complex(**{'real': 3, 'imag': 5})80 ```81- *позиционный аргумент*: аргумент, не являющийся именованным. Позиционные аргументы могут находиться в начале списка аргументов и/или передаваться как элементы [*итерируемого объекта*](https://python-all.ru/3.2/glossary.html#term-iterable) перед `*`. Например, `3` и `5` оба являются позиционными аргументами в следующих вызовах:8283 ```python84 complex(3, 5)85 complex(*(3, 5))86 ```8788Аргументы присваиваются именованным локальным переменным в теле функции. См. раздел [*Вызовы*](https://python-all.ru/3.2/reference/expressions.html#calls) для правил, регулирующих это присваивание. Синтаксически для представления аргумента можно использовать любое выражение; вычисленное значение присваивается локальной переменной.8990См. также запись глоссария [*параметр*](https://python-all.ru/3.2/glossary.html#term-parameter), вопрос FAQ о [*различии между аргументами и параметрами*](https://python-all.ru/3.2/faq/programming.html#faq-argument-vs-parameter), и [**PEP 362**](https://python-all.ru/3.2/glossary.html).9192**атрибут**9394Значение, связанное с объектом, на которое ссылаются по имени с помощью выражений с точкой. Например, если объект9596*o*9798имеет атрибут99100*a*101102, на него можно сослаться как103104*o.a*105106.107108**BDFL**109110Доброжелательный диктатор на всю жизнь, также известный как111112[Гвидо ван Россум](https://python-all.ru/3.2/glossary.html)113114, создатель Python.115116**байткод**117118Исходный код Python компилируется в байт-код – внутреннее представление программы на Python в интерпретаторе CPython. Байт-код также кэшируется в файлах `.pyc` и `.pyo`, чтобы повторное выполнение того же файла было быстрее (перекомпиляцию из исходного кода в байт-код можно избежать). Этот «промежуточный язык» выполняется на [*виртуальной машине*](https://python-all.ru/3.2/glossary.html#term-virtual-machine), которая исполняет машинный код, соответствующий каждому байт-коду. Обратите внимание, что байт-коды не должны работать между разными виртуальными машинами Python, ни быть стабильными между версиями Python.119120Список инструкций байткода можно найти в документации [*модуля dis*](https://python-all.ru/3.2/library/dis.html#bytecodes).121122**класс**123124Шаблон для создания пользовательских объектов. Определения классов обычно содержат определения методов, которые работают с экземплярами класса.125126**приведение типов**127128Неявное преобразование экземпляра одного типа в другой во время операции, включающей два аргумента одного типа. Например,129130`int(3.15)`131132преобразует число с плавающей запятой в целое число133134`3`135136, но в137138`3+4.5`139140каждый аргумент имеет разный тип (один int, другой float), и оба должны быть преобразованы в один и тот же тип, прежде чем их можно будет сложить, иначе будет возбуждено141142`TypeError`143144. Без приведения типов программисту пришлось бы нормализовать все аргументы, даже совместимых типов, до одного значения, например145146`float(3)+4.5`147148, а не просто149150`3+4.5`151152.153154**комплексное число**155156Расширение привычной системы действительных чисел, в котором все числа выражаются как сумма действительной и мнимой части. Мнимые числа – это действительные кратные мнимой единицы (квадратный корень из157158`-1`159160), часто записываемой как161162`i`163164в математике или165166`j`167168в технике. Python имеет встроенную поддержку комплексных чисел, которые записываются в последнем обозначении; мнимая часть записывается с суффиксом169170`j`171172, например,173174`3+1j`175176. Для доступа к комплексным аналогам модуля177178[`math`](https://python-all.ru/3.2/library/math.html#module-math)179180используйте181182[`cmath`](https://python-all.ru/3.2/library/cmath.html#module-cmath)183184. Использование комплексных чисел – довольно продвинутая математическая возможность. Если вы не осознаёте необходимости в них, почти наверняка их можно безопасно игнорировать.185186**контекстный менеджер**187188Объект, который управляет окружением, видимым в операторе189190[`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with)191192, определяя методы193194[`__enter__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__enter__)195196и197198[`__exit__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__exit__)199200. См.201202[**PEP 343**](https://python-all.ru/3.2/glossary.html)203204.205206**CPython**207208Каноническая реализация языка программирования Python, распространяемая на209210[python.org](https://python-all.ru/3.2/glossary.html)211212. Термин «CPython» используется, когда необходимо отличить эту реализацию от других, таких как Jython или IronPython.213214**декоратор**215216Функция, возвращающая другую функцию, обычно применяемая как преобразование функции с использованием синтаксиса `@wrapper`. Распространённые примеры декораторов: [`classmethod()`](https://python-all.ru/3.2/library/functions.html#classmethod) и [`staticmethod()`](https://python-all.ru/3.2/library/functions.html#staticmethod).217218Синтаксис декоратора – всего лишь синтаксический сахар, следующие два определения функций семантически эквивалентны:219220```python221def f(...):222 ...223f = staticmethod(f)224225@staticmethod226def f(...):227 ...228```229230Та же концепция существует и для классов, но там используется реже. См. документацию по [*определениям функций*](https://python-all.ru/3.2/reference/compound_stmts.html#function) и [*определениям классов*](https://python-all.ru/3.2/reference/compound_stmts.html#class) для получения дополнительной информации о декораторах.231232**дескриптор**233234Любой объект, который определяет методы [`__get__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__get__), [`__set__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__set__) или [`__delete__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__delete__). Когда атрибут класса является дескриптором, его специальное поведение связывания срабатывает при поиске атрибута. Обычно использование *a.b* для получения, установки или удаления атрибута ищет объект с именем *b* в словаре класса для *a*, но если *b* является дескриптором, вызывается соответствующий метод дескриптора. Понимание дескрипторов – ключ к глубокому пониманию Python, потому что они являются основой многих возможностей, включая функции, методы, свойства, методы класса, статические методы и ссылки на суперклассы.235236Подробнее о методах дескрипторов см. в [*Implementing Descriptors*](https://python-all.ru/3.2/reference/datamodel.html#descriptors).237238**словарь**239240Ассоциативный массив, в котором произвольные ключи сопоставляются значениям. Ключами могут быть любые объекты с методами241242[`__hash__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__hash__)243244и245246[`__eq__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__eq__)247248. В Perl называется хешем.249250**докстринг**251252Строковый литерал, который появляется как первое выражение в классе, функции или модуле. Хотя он игнорируется при выполнении блока, он распознаётся компилятором и помещается в атрибут253254`__doc__`255256окружающего класса, функции или модуля. Поскольку он доступен через интроспекцию, это каноническое место для документации объекта.257258**утиная типизация**259260Стиль программирования, который не смотрит на тип объекта, чтобы определить, есть ли у него нужный интерфейс; вместо этого метод или атрибут просто вызывается или используется («Если это выглядит как утка и крякает как утка, значит, это утка»). Делая упор на интерфейсы, а не на конкретные типы, хорошо спроектированный код повышает свою гибкость, допуская полиморфную подстановку. Утиная типизация избегает проверок с помощью261262[`type()`](https://python-all.ru/3.2/library/functions.html#type)263264или265266[`isinstance()`](https://python-all.ru/3.2/library/functions.html#isinstance)267268. (Однако обратите внимание, что утиную типизацию можно дополнить269270[*абстрактными базовыми классами*](https://python-all.ru/3.2/glossary.html#term-abstract-base-class)271272.) Вместо этого она обычно использует проверки273274[`hasattr()`](https://python-all.ru/3.2/library/functions.html#hasattr)275276или программирование в стиле277278[*EAFP*](https://python-all.ru/3.2/glossary.html#term-eafp)279280.281282**EAFP**283284Проще попросить прощения, чем разрешения. Этот распространённый стиль программирования на Python предполагает существование правильных ключей или атрибутов и перехватывает исключения, если предположение оказывается неверным. Этот чистый и быстрый стиль характеризуется наличием множества операторов285286[`try`](https://python-all.ru/3.2/reference/compound_stmts.html#try)287288и289290[`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except)291292. Этот подход контрастирует со стилем293294[*LBYL*](https://python-all.ru/3.2/glossary.html#term-lbyl)295296, распространённым во многих других языках, таких как C.297298**выражение**299300Синтаксическая конструкция, которая может быть вычислена в некоторое значение. Другими словами, выражение – это совокупность элементов выражения, таких как литералы, имена, доступ к атрибутам, операторы или вызовы функций, которые возвращают значение. В отличие от многих других языков, не все языковые конструкции являются выражениями. Существуют также301302[*инструкции*](https://python-all.ru/3.2/glossary.html#term-statement)303304, которые нельзя использовать как выражения, например305306[`if`](https://python-all.ru/3.2/reference/compound_stmts.html#if)307308. Присваивания также являются инструкциями, а не выражениями.309310**модуль-расширение**311312Модуль, написанный на C или C++, использующий C API Python для взаимодействия с ядром и пользовательским кодом.313314**файловый объект**315316Объект, предоставляющий файлово-ориентированный API (с методами, такими как `read()` или `write()`) для нижележащего ресурса. В зависимости от способа создания файловый объект может обеспечить доступ к реальному файлу на диске или к другому типу хранилища или коммуникационного устройства (например, стандартный ввод/вывод, буферы в памяти, сокеты, каналы и т.д.). Файловые объекты также называются *файлоподобными объектами* или *потоками данных*.317318На самом деле существует три категории файловых объектов: необработанные двоичные файлы, буферизованные двоичные файлы и текстовые файлы. Их интерфейсы определены в модуле [`io`](https://python-all.ru/3.2/library/io.html#module-io). Канонический способ создания файлового объекта – использование функции [`open()`](https://python-all.ru/3.2/library/functions.html#open).319320**файлоподобный объект**321322Синоним для323324[*файлового объекта*](https://python-all.ru/3.2/glossary.html#term-file-object)325326.327328**искатель**329330Объект, который пытается найти331332[*загрузчик*](https://python-all.ru/3.2/glossary.html#term-loader)333334для модуля. Он должен реализовывать метод с именем335336`find_module()`337338. См.339340[**PEP 302**](https://python-all.ru/3.2/glossary.html)341342для подробностей и343344[`importlib.abc.Finder`](https://python-all.ru/3.2/library/importlib.html#importlib.abc.Finder)345346для347348[*абстрактного базового класса*](https://python-all.ru/3.2/glossary.html#term-abstract-base-class)349350.351352**целочисленное деление**353354Математическое деление, округляющее результат до ближайшего целого вниз. Оператор деления с округлением вниз –355356`//`357358. Например, выражение359360`11 // 4`361362вычисляется в363364`2`365366в отличие от367368`2.75`369370, возвращаемого при истинном делении с плавающей запятой. Обратите внимание, что371372`(-11) // 4`373374равно375376`-3`377378, потому что это379380`-2.75`381382, округлённое383384*вниз*385386. См.387388[**PEP 238**](https://python-all.ru/3.2/glossary.html)389390.391392**функция**393394Последовательность инструкций, которая возвращает некоторое значение вызывающему коду. В неё также можно передать ноль или более395396[*аргументов*](https://python-all.ru/3.2/glossary.html#term-argument)397398, которые могут использоваться при выполнении тела. См. также399400[*параметр*](https://python-all.ru/3.2/glossary.html#term-parameter)401402,403404[*метод*](https://python-all.ru/3.2/glossary.html#term-method)405406, и раздел407408[*Определения функций*](https://python-all.ru/3.2/reference/compound_stmts.html#function)409410.411412**future**413414Псевдомодуль, с помощью которого программисты могут включать новые возможности языка, несовместимые с текущим интерпретатором.415416Импортировав модуль [`__future__`](https://python-all.ru/3.2/library/__future__.html#module-__future__) и вычислив его переменные, можно увидеть, когда новая возможность была впервые добавлена в язык и когда она стала поведением по умолчанию:417418```python419>>> import __future__420>>> __future__.division421_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)422```423424**сборка мусора**425426Процесс освобождения памяти, когда она больше не используется. Python выполняет сборку мусора с помощью подсчёта ссылок и циклического сборщика мусора, который способен обнаруживать и разрывать циклические ссылки.427428**генератор**429430Функция, которая возвращает итератор. Она выглядит как обычная функция, за исключением того, что содержит операторы431432[`yield`](https://python-all.ru/3.2/reference/simple_stmts.html#yield)433434для порождения последовательности значений, которые можно использовать в цикле for или получать по одному с помощью функции435436[`next()`](https://python-all.ru/3.2/library/functions.html#next)437438. Каждый439440[`yield`](https://python-all.ru/3.2/reference/simple_stmts.html#yield)441442временно приостанавливает выполнение, запоминая состояние выполнения (включая локальные переменные и ожидающие операторы try). Когда генератор возобновляется, он продолжает с того места, где остановился (в отличие от функций, которые начинают заново при каждом вызове).443444**генераторное выражение**445446Выражение, которое возвращает итератор. Оно выглядит как обычное выражение, за которым следует выражение [`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for), определяющее переменную цикла, диапазон и необязательное выражение [`if`](https://python-all.ru/3.2/reference/compound_stmts.html#if). Комбинированное выражение генерирует значения для внешней функции:447448```python449>>> sum(i*i for i in range(10)) # сумма квадратов 0, 1, 4, ... 81450285451```452453**GIL**454455См.456457[*глобальная блокировка интерпретатора*](https://python-all.ru/3.2/glossary.html#term-global-interpreter-lock)458459.460461**глобальная блокировка интерпретатора**462463Механизм, используемый интерпретатором [*CPython*](https://python-all.ru/3.2/glossary.html#term-cpython), чтобы гарантировать, что только один поток выполняет [*байткод Python*](https://python-all.ru/3.2/glossary.html#term-bytecode) в один момент времени. Это упрощает реализацию CPython, делая объектную модель (включая критически важные встроенные типы, такие как [`dict`](https://python-all.ru/3.2/library/stdtypes.html#dict)) неявно безопасной для конкурентного доступа. Блокировка всего интерпретатора облегчает его многопоточность, но ценой потери большей части параллелизма, который могли бы дать многопроцессорные машины.464465Однако некоторые расширяющие модули, как стандартные, так и сторонние, спроектированы так, чтобы освобождать GIL при выполнении вычислительно интенсивных задач, таких как сжатие или хеширование. Кроме того, GIL всегда освобождается при выполнении операций ввода-вывода.466467Прежние попытки создать «свободно-поточный» интерпретатор (тот, который блокирует общие данные с гораздо более мелкой гранулярностью) не увенчались успехом, потому что производительность страдала в типичном случае с одним процессором. Считается, что преодоление этой проблемы производительности сделало бы реализацию гораздо более сложной и, следовательно, более дорогой в сопровождении.468469**хешируемый**470471Объект является *хэшируемым*, если у него есть хэш-значение, которое никогда не меняется в течение его жизни (нужен метод [`__hash__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__hash__)), и его можно сравнивать с другими объектами (нужен метод [`__eq__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__eq__)). Хэшируемые объекты, которые сравниваются как равные, должны иметь одинаковое хэш-значение.472473Хешируемость позволяет использовать объект в качестве ключа словаря и элемента множества, поскольку эти структуры данных внутренне используют хеш-значение.474475Все неизменяемые встроенные объекты Python хешируемы, а изменяемые контейнеры (например, списки или словари) – нет. Объекты, являющиеся экземплярами пользовательских классов, по умолчанию хешируемы; все они сравниваются неравными (кроме сравнения с самими собой), и их хеш-значение равно [`id()`](https://python-all.ru/3.2/library/functions.html#id).476477**IDLE**478479Интегрированная среда разработки для Python. IDLE – это базовый редактор и среда интерпретатора, которая поставляется со стандартной дистрибуцией Python.480481**неизменяемый**482483Объект с фиксированным значением. К неизменяемым объектам относятся числа, строки и кортежи. Такой объект нельзя изменить. Если требуется сохранить другое значение, необходимо создать новый объект. Они играют важную роль там, где требуется постоянное хеш-значение, например в качестве ключа в словаре.484485**импортёр**486487Объект, который одновременно находит и загружает модуль; объект, являющийся как488489[*искателем*](https://python-all.ru/3.2/glossary.html#term-finder)490491, так и492493[*загрузчиком*](https://python-all.ru/3.2/glossary.html#term-loader)494495.496497**интерактивный**498499Python включает интерактивный интерпретатор: можно вводить инструкции и выражения в приглашении интерпретатора, сразу же выполнять их и видеть результат. Просто запустите500501`python`502503без аргументов (возможно, выбрав его из главного меню компьютера). Это очень удобный способ опробовать новые идеи или изучить модули и пакеты (вспомните504505`help(x)`506507).508509**интерпретируемый**510511Python является интерпретируемым языком, в отличие от компилируемых, хотя различие может быть размытым из-за наличия компилятора байткода. Это означает, что исходные файлы можно запускать напрямую, без явного создания исполняемого файла, который затем выполняется. Интерпретируемые языки обычно имеют более короткий цикл разработки/отладки, чем компилируемые, хотя их программы, как правило, выполняются медленнее. См. также512513[*интерактивный*](https://python-all.ru/3.2/glossary.html#term-interactive)514515.516517**итерируемый объект**518519Объект, способный возвращать свои элементы по одному. Примеры итерируемых объектов включают все последовательности (такие как520521[`list`](https://python-all.ru/3.2/library/functions.html#list)522523,524525[`str`](https://python-all.ru/3.2/library/functions.html#str)526527, и528529[`tuple`](https://python-all.ru/3.2/library/functions.html#tuple)530531), а также некоторые непоследовательные типы, например532533[`dict`](https://python-all.ru/3.2/library/stdtypes.html#dict)534535,536537[*файловые объекты*](https://python-all.ru/3.2/glossary.html#term-file-object)538539и объекты любых классов, для которых вы определили методы540541[`__iter__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__iter__)542543или544545[`__getitem__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__getitem__)546547. Итерируемые объекты можно использовать в цикле548549[`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for)550551и во многих других местах, где требуется последовательность (552553[`zip()`](https://python-all.ru/3.2/library/functions.html#zip)554555,556557[`map()`](https://python-all.ru/3.2/library/functions.html#map)558559, ...). Когда итерируемый объект передаётся в качестве аргумента встроенной функции560561[`iter()`](https://python-all.ru/3.2/library/functions.html#iter)562563, она возвращает итератор для этого объекта. Этот итератор годится для одного прохода по набору значений. При работе с итерируемыми объектами обычно не требуется вызывать564565[`iter()`](https://python-all.ru/3.2/library/functions.html#iter)566567или самостоятельно работать с объектами итераторов. Инструкция568569`for`570571делает это автоматически, создавая временную безымянную переменную для хранения итератора на время цикла. См. также572573[*итератор*](https://python-all.ru/3.2/glossary.html#term-iterator)574575,576577[*последовательность*](https://python-all.ru/3.2/glossary.html#term-sequence)578579и580581[*генератор*](https://python-all.ru/3.2/glossary.html#term-generator)582583.584585**итератор**586587Объект, представляющий поток данных. Повторные вызовы метода [`__next__()`](https://python-all.ru/3.2/library/stdtypes.html#iterator.__next__) итератора (или передача его встроенной функции [`next()`](https://python-all.ru/3.2/library/functions.html#next)) возвращают последовательные элементы потока. Когда данные заканчиваются, вместо них возбуждается исключение [`StopIteration`](https://python-all.ru/3.2/library/exceptions.html#StopIteration). После этого итератор считается исчерпанным, и любые дальнейшие вызовы его метода `__next__()` будут снова возбуждать [`StopIteration`](https://python-all.ru/3.2/library/exceptions.html#StopIteration). Итераторы должны иметь метод [`__iter__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__iter__), который возвращает сам объект итератора, так что каждый итератор также является итерируемым объектом и может использоваться в большинстве мест, где принимаются другие итерируемые объекты. Одним заметным исключением является код, пытающийся выполнить несколько проходов по итерации. Объект-контейнер (например, [`list`](https://python-all.ru/3.2/library/functions.html#list)) создаёт новый свежий итератор каждый раз, когда вы передаёте его функции [`iter()`](https://python-all.ru/3.2/library/functions.html#iter) или используете в цикле [`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for). Попытка сделать то же самое с итератором просто вернёт тот же самый исчерпанный итератор, который использовался в предыдущем проходе, из-за чего он будет выглядеть как пустой контейнер.588589Дополнительную информацию можно найти в [*Iterator Types*](https://python-all.ru/3.2/library/stdtypes.html#typeiter).590591**функция ключа**592593Ключевая функция (или функция сравнения) – это вызываемый объект, возвращающий значение, используемое для сортировки или упорядочивания. Например, [`locale.strxfrm()`](https://python-all.ru/3.2/library/locale.html#locale.strxfrm) используется для получения ключа сортировки, учитывающего правила сортировки, зависящие от локали.594595Ряд инструментов в Python принимают функции-ключи для управления порядком или группировкой элементов. К ним относятся [`min()`](https://python-all.ru/3.2/library/functions.html#min), [`max()`](https://python-all.ru/3.2/library/functions.html#max), [`sorted()`](https://python-all.ru/3.2/library/functions.html#sorted), `list.sort()`, [`heapq.nsmallest()`](https://python-all.ru/3.2/library/heapq.html#heapq.nsmallest), [`heapq.nlargest()`](https://python-all.ru/3.2/library/heapq.html#heapq.nlargest) и [`itertools.groupby()`](https://python-all.ru/3.2/library/itertools.html#itertools.groupby).596597Существует несколько способов создания ключевой функции. Например, метод [`str.lower()`](https://python-all.ru/3.2/library/stdtypes.html#str.lower) может служить ключевой функцией для сортировки без учёта регистра. Кроме того, специальную ключевую функцию можно построить из [`lambda`](https://python-all.ru/3.2/reference/expressions.html#lambda)-выражения, например `lambda r: (r[0], r[2])`. Также модуль [`operator`](https://python-all.ru/3.2/library/operator.html#module-operator) предоставляет три конструктора ключевых функций: [`attrgetter()`](https://python-all.ru/3.2/library/operator.html#operator.attrgetter), [`itemgetter()`](https://python-all.ru/3.2/library/operator.html#operator.itemgetter) и [`methodcaller()`](https://python-all.ru/3.2/library/operator.html#operator.methodcaller). См. [*Руководство по сортировке*](https://python-all.ru/3.2/howto/sorting.html#sortinghowto) с примерами создания и использования ключевых функций.598599**именованный аргумент**600601См.602603[*аргумент*](https://python-all.ru/3.2/glossary.html#term-argument)604605.606607**лямбда**608609Анонимная встроенная функция, состоящая из одного610611[*выражения*](https://python-all.ru/3.2/glossary.html#term-expression)612613, которое вычисляется при вызове функции. Синтаксис создания лямбда-функции:614615`lambda [аргументы]: выражение`616617**LBYL**618619Сначала подумай, потом делай (Look before you leap). Этот стиль кодирования явно проверяет предусловия перед выполнением вызовов или поиском. Этот стиль противопоставляется подходу [*EAFP*](https://python-all.ru/3.2/glossary.html#term-eafp) и характеризуется наличием множества инструкций [`if`](https://python-all.ru/3.2/reference/compound_stmts.html#if).620621В многопоточной среде подход LBYL может привести к состоянию гонки между «проверкой» и «действием». Например, код `if key in mapping: return mapping[key]` может не сработать, если другой поток удалит *key* из *mapping* после проверки, но до поиска. Проблему можно решить с помощью блокировок или используя подход EAFP.622623**список**624625Встроенная в Python626627[*последовательность*](https://python-all.ru/3.2/glossary.html#term-sequence)628629. Несмотря на название, она больше похожа на массив в других языках, чем на связный список, поскольку доступ к элементам осуществляется за O(1).630631**генератор списка**632633Компактный способ обработать все или часть элементов последовательности и вернуть список с результатами.634635`result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0]`636637генерирует список строк, содержащих чётные шестнадцатеричные числа (0x..) в диапазоне от 0 до 255. Часть638639[`if`](https://python-all.ru/3.2/reference/compound_stmts.html#if)640641необязательна. Если её опустить, обрабатываются все элементы из642643`range(256)`644645.646647**загрузчик**648649Объект, который загружает модуль. Должен определять метод650651`load_module()`652653. Загрузчик обычно возвращается654655[*искателем*](https://python-all.ru/3.2/glossary.html#term-finder)656657. Подробнее см.658659[**PEP 302**](https://python-all.ru/3.2/glossary.html)660661и662663[`importlib.abc.Loader`](https://python-all.ru/3.2/library/importlib.html#importlib.abc.Loader)664665в качестве666667[*абстрактного базового класса*](https://python-all.ru/3.2/glossary.html#term-abstract-base-class)668669.670671**отображение**672673Объект-контейнер, поддерживающий произвольный поиск по ключу и реализующий методы, указанные в674675[`Mapping`](https://python-all.ru/3.2/library/collections.html#collections.Mapping)676677или678679[`MutableMapping`](https://python-all.ru/3.2/library/collections.html#collections.MutableMapping)680681[*абстрактных базовых классах*](https://python-all.ru/3.2/library/collections.html#collections-abstract-base-classes)682683. Примеры включают684685[`dict`](https://python-all.ru/3.2/library/stdtypes.html#dict)686687,688689[`collections.defaultdict`](https://python-all.ru/3.2/library/collections.html#collections.defaultdict)690691,692693[`collections.OrderedDict`](https://python-all.ru/3.2/library/collections.html#collections.OrderedDict)694695и696697[`collections.Counter`](https://python-all.ru/3.2/library/collections.html#collections.Counter)698699.700701**метакласс**702703Класс класса. Определения классов создают имя класса, словарь класса и список базовых классов. Метакласс отвечает за приём этих трёх аргументов и создание класса. Большинство объектно-ориентированных языков программирования предоставляют реализацию по умолчанию. Особенность Python в том, что можно создавать пользовательские метаклассы. Большинству пользователей этот инструмент никогда не понадобится, но когда возникает необходимость, метаклассы могут предоставить мощные и элегантные решения. Они использовались для логирования доступа к атрибутам, добавления потокобезопасности, отслеживания создания объектов, реализации синглтонов и многих других задач.704705Дополнительную информацию можно найти в [*Настройка создания классов*](https://python-all.ru/3.2/reference/datamodel.html#metaclasses).706707**метод**708709Функция, определённая внутри тела класса. Если она вызывается как атрибут экземпляра этого класса, метод получает объект экземпляра в качестве первого710711[*аргумента*](https://python-all.ru/3.2/glossary.html#term-argument)712713(который обычно называется714715`self`716717). См. также718719[*функция*](https://python-all.ru/3.2/glossary.html#term-function)720721и722723[*вложенная область видимости*](https://python-all.ru/3.2/glossary.html#term-nested-scope)724725.726727**порядок разрешения методов**728729Порядок разрешения методов (Method Resolution Order) – это порядок, в котором базовые классы просматриваются при поиске члена класса. См.730731[The Python 2.3 Method Resolution Order](https://python-all.ru/3.2/glossary.html)732733.734735**MRO**736737См.738739[*порядок разрешения методов*](https://python-all.ru/3.2/glossary.html#term-method-resolution-order)740741.742743**изменяемый**744745Изменяемые объекты могут менять своё значение, сохраняя свой746747[`id()`](https://python-all.ru/3.2/library/functions.html#id)748749. См. также750751[*неизменяемый*](https://python-all.ru/3.2/glossary.html#term-immutable)752753.754755**именованный кортеж**756757Любой класс, подобный кортежу, индексируемые элементы которого также доступны через именованные атрибуты (например, [`time.localtime()`](https://python-all.ru/3.2/library/time.html#time.localtime) возвращает подобный кортежу объект, в котором *year* доступен либо по индексу, например `t[0]`, либо через именованный атрибут, например `t.tm_year`).758759Именованный кортеж может быть встроенным типом, например [`time.struct_time`](https://python-all.ru/3.2/library/time.html#time.struct_time), или может быть создан с помощью обычного определения класса. Полнофункциональный именованный кортеж также можно создать с помощью фабричной функции [`collections.namedtuple()`](https://python-all.ru/3.2/library/collections.html#collections.namedtuple). Последний подход автоматически предоставляет дополнительные возможности, такие как самодокументируемое представление, например `Employee(name='jones', title='programmer')`.760761**пространство имён**762763Место, где хранится переменная. Пространства имён реализованы в виде словарей. Существуют локальное, глобальное и встроенное пространства имён, а также вложенные пространства имён в объектах (в методах). Пространства имён поддерживают модульность, предотвращая конфликты имён. Например, функции764765`builtins.open()`766767и768769[`os.open()`](https://python-all.ru/3.2/library/os.html#os.open)770771различаются своими пространствами имён. Пространства имён также помогают читаемости и поддерживаемости, делая понятным, какой модуль реализует функцию. Например, запись772773[`random.seed()`](https://python-all.ru/3.2/library/random.html#random.seed)774775или776777[`itertools.islice()`](https://python-all.ru/3.2/library/itertools.html#itertools.islice)778779показывает, что эти функции реализованы модулями780781[`random`](https://python-all.ru/3.2/library/random.html#module-random)782783и784785[`itertools`](https://python-all.ru/3.2/library/itertools.html#module-itertools)786787соответственно.788789**вложенная область видимости**790791Возможность ссылаться на переменную из внешнего определения. Например, функция, определённая внутри другой функции, может обращаться к переменным внешней функции. Обратите внимание, что по умолчанию вложенные области видимости работают только для чтения, но не для присваивания. Локальные переменные читаются и записываются в самой внутренней области. Аналогично, глобальные переменные читаются и записываются в глобальном пространстве имён. Ключевое слово792793[`nonlocal`](https://python-all.ru/3.2/reference/simple_stmts.html#nonlocal)794795позволяет выполнять запись во внешние области видимости.796797**класс нового стиля**798799Старое название разновидности классов, которая теперь используется для всех объектов классов. В более ранних версиях Python только классы нового стиля могли использовать новые и универсальные возможности Python, такие как800801`__slots__`802803, дескрипторы, свойства,804805[`__getattribute__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__getattribute__)806807, методы класса и статические методы.808809**объект**810811Любые данные с состоянием (атрибуты или значение) и определённым поведением (методы). Также конечный базовый класс любого812813[*класса нового стиля*](https://python-all.ru/3.2/glossary.html#term-new-style-class)814815.816817**параметр**818819Именованная сущность в определении [*функции*](https://python-all.ru/3.2/glossary.html#term-function) (или метода), которая указывает на [*аргумент*](https://python-all.ru/3.2/glossary.html#term-argument) (или в некоторых случаях аргументы), который может принимать функция. Существует пять типов параметров:820821- *позиционный или ключевой*: указывает аргумент, который может быть передан либо [*позиционно*](https://python-all.ru/3.2/glossary.html#term-argument), либо в качестве [*ключевого аргумента*](https://python-all.ru/3.2/glossary.html#term-argument). Это вид параметра по умолчанию, например *foo* и *bar* в следующем примере:822823 ```python824 def func(foo, bar=None): ...825 ```826- *Только для позиционной передачи*: указывает аргумент, который может быть передан только по позиции. В Python нет синтаксиса для определения параметров только для позиционной передачи. Однако некоторые встроенные функции имеют такие параметры (например, [`abs()`](https://python-all.ru/3.2/library/functions.html#abs)).827- *только ключевой*: указывает аргумент, который может быть передан только по ключевому слову. Параметры только по ключевым словам можно определить, включив один вариативно-позиционный параметр или просто `*` в список параметров определения функции перед ними, например *kw\_only1* и *kw\_only2* в следующем примере:828829 ```python830 def func(arg, *, kw_only1, kw_only2): ...831 ```832- *вариативно-позиционный*: указывает, что может быть предоставлена произвольная последовательность позиционных аргументов (в дополнение к любым позиционным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `*` перед именем параметра, например *args* в следующем примере:833834 ```python835 def func(*args, **kwargs): ...836 ```837- *вариативно-ключевой*: указывает, что может быть предоставлено произвольно много именованных аргументов (в дополнение к любым именованным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `**` перед именем параметра, например *kwargs* в примере выше.838839Параметры могут определять как необязательные, так и обязательные аргументы, а также значения по умолчанию для некоторых необязательных аргументов.840841См. также глоссарий [*аргумент*](https://python-all.ru/3.2/glossary.html#term-argument), вопрос из FAQ о [*разнице между аргументами и параметрами*](https://python-all.ru/3.2/faq/programming.html#faq-argument-vs-parameter), класс `inspect.Parameter`, раздел [*Определения функций*](https://python-all.ru/3.2/reference/compound_stmts.html#function) и [**PEP 362**](https://python-all.ru/3.2/glossary.html).842843**позиционный аргумент**844845См.846847[*аргумент*](https://python-all.ru/3.2/glossary.html#term-argument)848849.850851**Python 3000**852853Прозвище для линейки релизов Python 3.x (придумано давно, когда выпуск версии 3 был чем-то из далёкого будущего). Также сокращённо называется «Py3k».854855**Питоничный**856857Идея или фрагмент кода, который тесно следует наиболее распространённым идиомам языка Python, а не использует концепции, общие для других языков. Например, распространённая идиома в Python – перебор всех элементов итерируемого объекта с помощью оператора [`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for). Во многих других языках такой конструкции нет, поэтому люди, не знакомые с Python, иногда используют числовой счётчик:858859```python860for i in range(len(food)):861 print(food[i])862```863864В отличие от более чистого, питоничного метода:865866```python867for piece in food:868 print(piece)869```870871**счётчик ссылок**872873Число ссылок на объект. Когда счётчик ссылок объекта падает до нуля, он освобождается. Подсчёт ссылок обычно невидим для кода Python, но является ключевым элементом реализации874875[*CPython*](https://python-all.ru/3.2/glossary.html#term-cpython)876877. Модуль878879[`sys`](https://python-all.ru/3.2/library/sys.html#module-sys)880881определяет функцию882883[`getrefcount()`](https://python-all.ru/3.2/library/sys.html#sys.getrefcount)884885, которую программисты могут вызывать для получения счётчика ссылок конкретного объекта.886887**slots**888889Объявление внутри класса, которое экономит память, заранее выделяя место для атрибутов экземпляра и устраняя словари экземпляров. Хотя этот метод популярен, его правильное применение требует некоторой аккуратности, и его лучше использовать только в редких случаях, когда в приложении с критичной памятью создаётся большое количество экземпляров.890891**последовательность**892893[*Итерируемый объект*](https://python-all.ru/3.2/glossary.html#term-iterable)894895, который поддерживает эффективный доступ к элементам по целочисленным индексам через специальный метод896897[`__getitem__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__getitem__)898899и определяет метод900901[`__len__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__len__)902903, возвращающий длину последовательности. Некоторые встроенные типы последовательностей:904905[`list`](https://python-all.ru/3.2/library/functions.html#list)906907,908909[`str`](https://python-all.ru/3.2/library/functions.html#str)910911,912913[`tuple`](https://python-all.ru/3.2/library/functions.html#tuple)914915и916917[`bytes`](https://python-all.ru/3.2/library/functions.html#bytes)918919. Обратите внимание, что920921[`dict`](https://python-all.ru/3.2/library/stdtypes.html#dict)922923тоже поддерживает924925[`__getitem__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__getitem__)926927и928929[`__len__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__len__)930931, но считается отображением, а не последовательностью, поскольку поиск использует произвольные932933[*неизменяемые*](https://python-all.ru/3.2/glossary.html#term-immutable)934935ключи, а не целые числа.936937**срез**938939Объект, обычно содержащий часть940941[*последовательности*](https://python-all.ru/3.2/glossary.html#term-sequence)942943. Срез создаётся с помощью синтаксиса индексации,944945`[]`946947с двоеточиями между числами, если указано несколько, как в948949`variable_name[1:3:5]`950951. Синтаксис квадратных скобок (индексации) внутри использует объекты952953[`slice`](https://python-all.ru/3.2/library/functions.html#slice)954955.956957**специальный метод**958959A method that is called implicitly by Python to execute a certain operation on a type, such as addition. Such methods have names starting and ending with double underscores. Special methods are documented in960961[*Special method names*](https://python-all.ru/3.2/reference/datamodel.html#specialnames)962963.964965**инструкция**966967Инструкция (statement) – это часть блока (блока кода). Инструкцией является либо968969[*выражение*](https://python-all.ru/3.2/glossary.html#term-expression)970971, либо одна из нескольких конструкций с ключевым словом, таких как972973[`if`](https://python-all.ru/3.2/reference/compound_stmts.html#if)974975,976977[`while`](https://python-all.ru/3.2/reference/compound_stmts.html#while)978979или980981[`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for)982983.984985**строка в тройных кавычках**986987Строка, ограниченная тремя экземплярами кавычек (”) или апострофов (‘). Хотя они не предоставляют никакой функциональности, недоступной в строках с одинарными кавычками, они полезны по ряду причин. Они позволяют включать неэкранированные одинарные и двойные кавычки внутри строки и могут занимать несколько строк без использования символа продолжения, что делает их особенно полезными при написании докстрингов.988989**тип**990991Тип объекта Python определяет, что это за объект; каждый объект имеет тип. Тип объекта доступен как его атрибут992993`__class__`994995или может быть получен с помощью996997`type(obj)`998999.10001001**универсальные символы новой строки**10021003A manner of interpreting text streams in which all of the following are recognized as ending a line: the Unix end-of-line convention10041005`'\n'`10061007, the Windows convention10081009`'\r\n'`10101011, and the old Macintosh convention10121013`'\r'`10141015. See10161017[**PEP 278**](https://python-all.ru/3.2/glossary.html)10181019and10201021[**PEP 3116**](https://python-all.ru/3.2/glossary.html)10221023, as well as10241025[`str.splitlines()`](https://python-all.ru/3.2/library/stdtypes.html#str.splitlines)10261027for an additional use.10281029**представление**10301031Объекты, возвращаемые10321033[`dict.keys()`](https://python-all.ru/3.2/library/stdtypes.html#dict.keys)10341035,10361037[`dict.values()`](https://python-all.ru/3.2/library/stdtypes.html#dict.values)10381039и10401041[`dict.items()`](https://python-all.ru/3.2/library/stdtypes.html#dict.items)10421043, называются представлениями словаря. Это ленивые последовательности, которые видят изменения в базовом словаре. Чтобы принудительно преобразовать представление словаря в полноценный список, используйте10441045`list(dictview)`10461047. См.10481049[*Объекты представления словаря*](https://python-all.ru/3.2/library/stdtypes.html#dict-views)10501051.10521053**виртуальная машина**10541055Компьютер, полностью определённый в программном обеспечении. Виртуальная машина Python выполняет10561057[*байт-код*](https://python-all.ru/3.2/glossary.html#term-bytecode)10581059, генерируемый компилятором байт-кода.10601061**Дзен Python**10621063Перечень принципов и философии проектирования Python, полезных для понимания и использования языка. Этот перечень можно получить, введя в интерактивном режиме «10641065`import this`10661067».1068