Документация Python неофициальный перевод

glossary.md

457 строк · 70.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/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/2.7/library/2to3.html#module-lib2to3); отдельная точка входа предоставляется как `Tools/scripts/2to3`. См. [2to3 – автоматический перевод кода Python 2 в Python 3](https://python-all.ru/2.7/library/2to3.html#to3-reference).2223**абстрактный базовый класс**2425Абстрактные базовые классы дополняют [утиную типизацию](https://python-all.ru/2.7/glossary.html#term-duck-typing), предоставляя способ определения интерфейсов, когда другие техники, такие как [`hasattr()`](https://python-all.ru/2.7/library/functions.html#hasattr), могут быть неуклюжими или не совсем корректными (например, с [магическими методами](https://python-all.ru/2.7/reference/datamodel.html#new-style-special-lookup)). ABC вводят виртуальные подклассы – классы, которые не наследуют от класса, но всё равно распознаются [`isinstance()`](https://python-all.ru/2.7/library/functions.html#isinstance) и [`issubclass()`](https://python-all.ru/2.7/library/functions.html#issubclass); см. документацию модуля [`abc`](https://python-all.ru/2.7/library/abc.html#module-abc). Python поставляется со многими встроенными ABC для структур данных (в модуле [`collections`](https://python-all.ru/2.7/library/collections.html#module-collections)), чисел (в модуле [`numbers`](https://python-all.ru/2.7/library/numbers.html#module-numbers)) и потоков (в модуле [`io`](https://python-all.ru/2.7/library/io.html#module-io)). Можно создавать собственные ABC с помощью модуля [`abc`](https://python-all.ru/2.7/library/abc.html#module-abc).2627**аргумент**2829Значение, передаваемое в [функцию](https://python-all.ru/2.7/glossary.html#term-function) (или [метод](https://python-all.ru/2.7/glossary.html#term-method)) при её вызове. Существует два типа аргументов:3031- *именованный аргумент*: аргумент, перед которым стоит идентификатор (например, `name=`) в вызове функции или переданный как значение в словаре перед `**`. Например, `3` и `5` оба являются именованными аргументами в следующих вызовах [`complex()`](https://python-all.ru/2.7/library/functions.html#complex):3233  ```python34  complex(real=3, imag=5)35  complex(**{'real': 3, 'imag': 5})36  ```37- *позиционный аргумент*: аргумент, не являющийся именованным. Позиционные аргументы могут находиться в начале списка аргументов и/или передаваться как элементы [итерируемого объекта](https://python-all.ru/2.7/glossary.html#term-iterable) перед `*`. Например, `3` и `5` оба являются позиционными аргументами в следующих вызовах:3839  ```python40  complex(3, 5)41  complex(*(3, 5))42  ```4344Аргументы присваиваются именованным локальным переменным в теле функции. См. раздел [Вызовы](https://python-all.ru/2.7/reference/expressions.html#calls) для правил, регулирующих это присваивание. Синтаксически для представления аргумента можно использовать любое выражение; вычисленное значение присваивается локальной переменной.4546См. также статью глоссария [параметр](https://python-all.ru/2.7/glossary.html#term-parameter) и вопрос из FAQ о [разнице между аргументами и параметрами](https://python-all.ru/2.7/faq/programming.html#faq-argument-vs-parameter).4748**атрибут**4950Значение, связанное с объектом, на которое ссылаются по имени с помощью выражений с точкой. Например, если объект *o* имеет атрибут *a*, на него можно сослаться как *o.a*.5152**BDFL**5354Доброжелательный диктатор на всю жизнь, также известный как [Гвидо ван Россум](https://python-all.ru/2.7/glossary.html), создатель Python.5556**байтоподобный объект**5758Объект, поддерживающий [буферный протокол](https://python-all.ru/2.7/c-api/buffer.html#bufferobjects), например [`str`](https://python-all.ru/2.7/library/functions.html#str), [`bytearray`](https://python-all.ru/2.7/library/functions.html#bytearray) или [`memoryview`](https://python-all.ru/2.7/library/stdtypes.html#memoryview). Байтоподобные объекты можно использовать для различных операций, ожидающих двоичные данные, таких как сжатие, сохранение в двоичный файл или отправка через сокет. Некоторым операциям требуются изменяемые двоичные данные, и в этом случае подходят не все байтоподобные объекты.5960**байткод**6162Исходный код Python компилируется в байт-код – внутреннее представление программы Python в интерпретаторе CPython. Байт-код также кэшируется в файлах `.pyc` и `.pyo`, чтобы повторное выполнение одного и того же файла было быстрее (можно избежать повторной компиляции из исходного кода в байт-код). Говорят, что этот «промежуточный язык» выполняется на [виртуальной машине](https://python-all.ru/2.7/glossary.html#term-virtual-machine), которая выполняет машинный код, соответствующий каждому байт-коду. Обратите внимание, что байт-коды не должны работать между разными виртуальными машинами Python, а также не гарантируют стабильность между версиями Python.6364Список инструкций байткода можно найти в документации [модуля dis](https://python-all.ru/2.7/library/dis.html#bytecodes).6566**класс**6768Шаблон для создания пользовательских объектов. Определения классов обычно содержат определения методов, которые работают с экземплярами класса.6970**классический класс**7172Любой класс, который не наследуется от [`object`](https://python-all.ru/2.7/library/functions.html#object). См. [класс нового стиля](https://python-all.ru/2.7/glossary.html#term-new-style-class). Классические классы были удалены в Python 3.7374**приведение типов**7576Неявное преобразование экземпляра одного типа в другой при операции, включающей два аргумента одного типа. Например, `int(3.15)` преобразует число с плавающей запятой в целое `3`, но в `3+4.5` каждый аргумент имеет разный тип (один int, другой float), и оба должны быть преобразованы к одному типу, прежде чем их можно будет сложить, иначе будет возбуждено исключение `TypeError`. Приведение между двумя операндами можно выполнить с помощью встроенной функции `coerce`; таким образом, `3+4.5` эквивалентно вызову `operator.add(*coerce(3, 4.5))` и даёт `operator.add(3.0, 4.5)`. Без приведения программисту пришлось бы нормализовать все аргументы, даже совместимых типов, к одному значению, например `float(3)+4.5` вместо просто `3+4.5`.7778**комплексное число**7980Расширение привычной системы действительных чисел, в котором все числа выражаются как сумма действительной и мнимой частей. Мнимые числа – это действительные кратные мнимой единицы (квадратный корень из `-1`), часто обозначаемой `i` в математике или `j` в инженерии. Python имеет встроенную поддержку комплексных чисел, которые записываются в этой последней нотации; мнимая часть записывается с суффиксом `j`, например, `3+1j`. Чтобы получить доступ к комплексным аналогам модуля [`math`](https://python-all.ru/2.7/library/math.html#module-math), используйте [`cmath`](https://python-all.ru/2.7/library/cmath.html#module-cmath). Использование комплексных чисел – довольно продвинутая математическая возможность. Если нет очевидной необходимости в них, их почти наверняка можно безопасно игнорировать.8182**контекстный менеджер**8384Объект, управляющий окружением в операторе [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with) путём определения методов [`__enter__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__enter__) и [`__exit__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__exit__). См. [**PEP 343**](https://python-all.ru/2.7/glossary.html).8586**CPython**8788Каноническая реализация языка программирования Python, распространяемая на [python.org](https://python-all.ru/2.7/glossary.html). Термин «CPython» используется, когда необходимо отличить эту реализацию от других, таких как Jython или IronPython.8990**декоратор**9192Функция, возвращающая другую функцию, обычно применяется как преобразование функции с помощью синтаксиса `@wrapper`. Распространённые примеры декораторов: [`classmethod()`](https://python-all.ru/2.7/library/functions.html#classmethod) и [`staticmethod()`](https://python-all.ru/2.7/library/functions.html#staticmethod).9394Синтаксис декоратора – всего лишь синтаксический сахар, следующие два определения функций семантически эквивалентны:9596```python97def f(...):98    ...99f = staticmethod(f)100101@staticmethod102def f(...):103    ...104```105106Та же концепция существует и для классов, но там используется реже. См. документацию по [определениям функций](https://python-all.ru/2.7/reference/compound_stmts.html#function) и [определениям классов](https://python-all.ru/2.7/reference/compound_stmts.html#class) для получения дополнительной информации о декораторах.107108**дескриптор**109110Любой объект *нового стиля*, который определяет методы [`__get__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__get__), [`__set__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__set__) или [`__delete__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__delete__). Когда атрибут класса является дескриптором, его особое связывающее поведение запускается при поиске атрибута. Обычно при использовании *a.b* для получения, установки или удаления атрибута выполняется поиск объекта с именем *b* в словаре класса для *a*, но если *b* является дескриптором, вызывается соответствующий метод дескриптора. Понимание дескрипторов – ключ к глубокому пониманию Python, поскольку они являются основой многих возможностей, включая функции, методы, свойства, методы класса, статические методы и ссылки на суперклассы.111112Подробнее о методах дескрипторов см. в [Implementing Descriptors](https://python-all.ru/2.7/reference/datamodel.html#descriptors).113114**словарь**115116Ассоциативный массив, в котором произвольные ключи сопоставляются со значениями. Ключами могут быть любые объекты с методами [`__hash__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__hash__) и [`__eq__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__eq__). В Perl называется хешем.117118**представление словаря**119120Объекты, возвращаемые [`dict.viewkeys()`](https://python-all.ru/2.7/library/stdtypes.html#dict.viewkeys), [`dict.viewvalues()`](https://python-all.ru/2.7/library/stdtypes.html#dict.viewvalues) и [`dict.viewitems()`](https://python-all.ru/2.7/library/stdtypes.html#dict.viewitems), называются представлениями словаря. Они предоставляют динамическое представление записей словаря, то есть при изменении словаря представление отражает эти изменения. Чтобы принудительно превратить представление словаря в полноценный список, используйте `list(dictview)`. См. [Объекты представлений словаря](https://python-all.ru/2.7/library/stdtypes.html#dict-views).121122**докстринг**123124Строковый литерал, который появляется как первое выражение в классе, функции или модуле. Хотя он игнорируется при выполнении кода внутри блока, компилятор распознаёт его и помещает в атрибут `__doc__` содержащего класса, функции или модуля. Поскольку к нему можно получить доступ через интроспекцию, это каноническое место для документации объекта.125126**утиная типизация**127128Стиль программирования, который не проверяет тип объекта для определения, обладает ли он нужным интерфейсом; вместо этого метод или атрибут просто вызывается или используется («Если это выглядит как утка и крякает как утка, значит, это утка»). Делая упор на интерфейсы, а не на конкретные типы, хорошо спроектированный код повышает гибкость за счёт полиморфной замены. Утиная типизация избегает проверок с помощью [`type()`](https://python-all.ru/2.7/library/functions.html#type) или [`isinstance()`](https://python-all.ru/2.7/library/functions.html#isinstance). (Однако утиную типизацию можно дополнить [абстрактными базовыми классами](https://python-all.ru/2.7/glossary.html#term-abstract-base-class).) Вместо этого она обычно использует проверки [`hasattr()`](https://python-all.ru/2.7/library/functions.html#hasattr) или программирование в стиле [EAFP](https://python-all.ru/2.7/glossary.html#term-eafp).129130**EAFP**131132Легче попросить прощения, чем разрешения. Этот распространённый стиль программирования на Python предполагает наличие допустимых ключей или атрибутов и перехватывает исключения, если предположение оказывается неверным. Этот чистый и быстрый стиль характеризуется наличием множества операторов [`try`](https://python-all.ru/2.7/reference/compound_stmts.html#try) и [`except`](https://python-all.ru/2.7/reference/compound_stmts.html#except). Этот подход противопоставляется стилю [LBYL](https://python-all.ru/2.7/glossary.html#term-lbyl), распространённому во многих других языках, таких как C.133134**выражение**135136Фрагмент синтаксиса, который может быть вычислен в некоторое значение. Другими словами, выражение – это совокупность элементов выражений, таких как литералы, имена, доступ к атрибутам, операторы или вызовы функций, которые возвращают значение. В отличие от многих других языков, не все языковые конструкции являются выражениями. Существуют также [инструкции](https://python-all.ru/2.7/glossary.html#term-statement), которые нельзя использовать как выражения, например [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print) или [`if`](https://python-all.ru/2.7/reference/compound_stmts.html#if). Присваивания также являются инструкциями, а не выражениями.137138**модуль-расширение**139140Модуль, написанный на C или C++, использующий C API Python для взаимодействия с ядром и пользовательским кодом.141142**файловый объект**143144Объект, предоставляющий файловый API (с методами, такими как `read()` или `write()`) для нижележащего ресурса. В зависимости от способа создания, файловый объект может обеспечивать доступ к реальному файлу на диске или к другому типу хранилища или устройства связи (например, стандартный ввод/вывод, буферы в памяти, сокеты, каналы и т.д.). Файловые объекты также называются *объектами, подобными файлам* или *потоками данных*.145146На самом деле существует три категории файловых объектов: необработанные двоичные файлы, буферизованные двоичные файлы и текстовые файлы. Их интерфейсы определены в модуле [`io`](https://python-all.ru/2.7/library/io.html#module-io). Канонический способ создания файлового объекта – использование функции [`open()`](https://python-all.ru/2.7/library/functions.html#open).147148**файлоподобный объект**149150Синоним для [файлового объекта](https://python-all.ru/2.7/glossary.html#term-file-object).151152**искатель**153154Объект, который пытается найти [загрузчик](https://python-all.ru/2.7/glossary.html#term-loader) для модуля. Он должен реализовывать метод с именем `find_module()`. Подробнее см. [**PEP 302**](https://python-all.ru/2.7/glossary.html).155156**целочисленное деление**157158Математическое деление, округляющее результат до ближайшего целого вниз. Оператор деления с округлением вниз – `//`. Например, выражение `11 // 4` вычисляется в `2` в отличие от `2.75`, возвращаемого при истинном делении с плавающей запятой. Обратите внимание, что `(-11) // 4` равно `-3`, потому что это `-2.75`, округлённое *вниз*. См. [**PEP 238**](https://python-all.ru/2.7/glossary.html).159160**функция**161162Последовательность инструкций, которая возвращает некоторое значение вызывающему коду. В неё также можно передать ноль или более [аргументов](https://python-all.ru/2.7/glossary.html#term-argument), которые могут использоваться при выполнении тела. См. также [параметр](https://python-all.ru/2.7/glossary.html#term-parameter), [метод](https://python-all.ru/2.7/glossary.html#term-method), и раздел [Определения функций](https://python-all.ru/2.7/reference/compound_stmts.html#function).163164**future**165166Псевдомодуль, который программисты могут использовать для включения новых возможностей языка, несовместимых с текущим интерпретатором. Например, выражение `11/4` в настоящее время вычисляется в `2`. Если бы в модуле, в котором оно выполняется, было включено *истинное деление* с помощью выполнения:167168```python169from __future__ import division170```171172выражение `11/4` будет вычисляться в `2.75`. Импортировав модуль [`__future__`](https://python-all.ru/2.7/library/__future__.html#module-__future__) и вычислив его переменные, можно увидеть, когда новая возможность была впервые добавлена в язык и когда она станет поведением по умолчанию:173174```python175>>> import __future__176>>> __future__.division177_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)178```179180**сборка мусора**181182Процесс освобождения памяти, когда она больше не используется. Python выполняет сборку мусора с помощью подсчёта ссылок и циклического сборщика мусора, который способен обнаруживать и разрывать циклические ссылки.183184**генератор**185186Функция, которая возвращает итератор. Она выглядит как обычная функция, за исключением того, что содержит инструкции [`yield`](https://python-all.ru/2.7/reference/simple_stmts.html#yield) для получения последовательности значений, которые можно использовать в цикле for или получать по одному с помощью функции [`next()`](https://python-all.ru/2.7/library/functions.html#next). Каждый [`yield`](https://python-all.ru/2.7/reference/simple_stmts.html#yield) временно приостанавливает выполнение, запоминая состояние выполнения (включая локальные переменные и ожидающие try-инструкции). Когда генератор возобновляется, он продолжает с того места, где остановился (в отличие от функций, которые начинают заново при каждом вызове).187188**генераторное выражение**189190Выражение, которое возвращает итератор. Оно выглядит как обычное выражение, за которым следует выражение [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for), определяющее переменную цикла, диапазон и необязательное выражение [`if`](https://python-all.ru/2.7/reference/compound_stmts.html#if). Полученное выражение генерирует значения для объемлющей функции:191192```python193>>> sum(i*i for i in range(10))         # сумма квадратов 0, 1, 4, ... 81194285195```196197**GIL**198199См. [глобальная блокировка интерпретатора](https://python-all.ru/2.7/glossary.html#term-global-interpreter-lock).200201**глобальная блокировка интерпретатора**202203Механизм, используемый интерпретатором [CPython](https://python-all.ru/2.7/glossary.html#term-cpython) для обеспечения того, чтобы только один поток выполнял [байт-код](https://python-all.ru/2.7/glossary.html#term-bytecode) Python в каждый момент времени. Это упрощает реализацию CPython, делая объектную модель (включая критические встроенные типы, такие как [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict)) неявно безопасной при конкурентном доступе. Блокировка всего интерпретатора упрощает многопоточность интерпретатора, но ценой потери большей части параллелизма, обеспечиваемого многопроцессорными машинами.204205Однако некоторые расширяющие модули, как стандартные, так и сторонние, спроектированы так, чтобы освобождать GIL при выполнении вычислительно интенсивных задач, таких как сжатие или хеширование. Кроме того, GIL всегда освобождается при выполнении операций ввода-вывода.206207Прежние попытки создать «свободно-поточный» интерпретатор (тот, который блокирует общие данные с гораздо более мелкой гранулярностью) не увенчались успехом, потому что производительность страдала в типичном случае с одним процессором. Считается, что преодоление этой проблемы производительности сделало бы реализацию гораздо более сложной и, следовательно, более дорогой в сопровождении.208209**хешируемый**210211Объект является *хешируемым*, если он имеет хеш-значение, которое никогда не меняется в течение его жизни (ему нужен метод [`__hash__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__hash__)), и может сравниваться с другими объектами (ему нужен метод [`__eq__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__eq__) или [`__cmp__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__cmp__)). Хешируемые объекты, которые равны при сравнении, должны иметь одинаковое хеш-значение.212213Хешируемость позволяет использовать объект в качестве ключа словаря и элемента множества, поскольку эти структуры данных внутренне используют хеш-значение.214215Все неизменяемые встроенные объекты Python являются хешируемыми, а изменяемые контейнеры (такие как списки или словари) – нет. Объекты, являющиеся экземплярами пользовательских классов, по умолчанию хешируемы; все они неравны при сравнении (кроме сравнения с самим собой), и их хеш-значение получается из их [`id()`](https://python-all.ru/2.7/library/functions.html#id).216217**IDLE**218219Интегрированная среда разработки для Python. IDLE – это базовый редактор и среда интерпретатора, которая поставляется со стандартной дистрибуцией Python.220221**неизменяемый**222223Объект с фиксированным значением. К неизменяемым объектам относятся числа, строки и кортежи. Такой объект нельзя изменить. Если требуется сохранить другое значение, необходимо создать новый объект. Они играют важную роль там, где требуется постоянное хеш-значение, например в качестве ключа в словаре.224225**целочисленное деление**226227Математическое деление с отбрасыванием остатка. Например, выражение `11/4` в настоящее время вычисляется в `2` в отличие от `2.75`, возвращаемого делением с плавающей запятой. Также называется *делением с округлением вниз*. При делении двух целых чисел результатом всегда будет другое целое число (с применением функции округления вниз). Однако если один из операндов имеет другой числовой тип (например, [`float`](https://python-all.ru/2.7/library/functions.html#float)), результат будет приведён (см. [приведение](https://python-all.ru/2.7/glossary.html#term-coercion)) к общему типу. Например, целое, делённое на число с плавающей запятой, даст значение с плавающей запятой, возможно, с десятичной дробью. Целочисленное деление можно выполнить принудительно, используя оператор `//` вместо оператора `/`. См. также [\_\_future\_\_](https://python-all.ru/2.7/glossary.html#term-future).228229**импортирование**230231Процесс, благодаря которому код Python в одном модуле становится доступным коду Python в другом модуле.232233**импортёр**234235Объект, который одновременно находит и загружает модуль; объект, являющийся как [искателем](https://python-all.ru/2.7/glossary.html#term-finder), так и [загрузчиком](https://python-all.ru/2.7/glossary.html#term-loader).236237**интерактивный**238239Python имеет интерактивный интерпретатор, что позволяет вводить инструкции и выражения в приглашении интерпретатора, немедленно выполнять их и видеть результаты. Для этого достаточно запустить `python` без аргументов (возможно, выбрав его из главного меню компьютера). Это очень мощный способ проверки новых идей или изучения модулей и пакетов (помните `help(x)`).240241**интерпретируемый**242243Python является интерпретируемым языком, в отличие от компилируемых, хотя различие может быть размытым из-за наличия компилятора байткода. Это означает, что исходные файлы можно запускать напрямую, без явного создания исполняемого файла, который затем выполняется. Интерпретируемые языки обычно имеют более короткий цикл разработки/отладки, чем компилируемые, хотя их программы, как правило, выполняются медленнее. См. также [интерактивный](https://python-all.ru/2.7/glossary.html#term-interactive).244245**итерируемый объект**246247Объект, способный возвращать свои элементы по одному. Примеры итерируемых объектов включают все типы последовательностей (такие как `list`, [`str`](https://python-all.ru/2.7/library/functions.html#str) и [`tuple`](https://python-all.ru/2.7/library/functions.html#tuple)) и некоторые не последовательностные типы, например [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict) и [`file`](https://python-all.ru/2.7/library/functions.html#file), а также объекты любых классов, для которых определён метод [`__iter__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__iter__) или [`__getitem__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getitem__). Итерируемые объекты можно использовать в цикле [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for) и во многих других местах, где требуется последовательность ([`zip()`](https://python-all.ru/2.7/library/functions.html#zip), [`map()`](https://python-all.ru/2.7/library/functions.html#map), …). Когда итерируемый объект передаётся в качестве аргумента встроенной функции [`iter()`](https://python-all.ru/2.7/library/functions.html#iter), она возвращает итератор для этого объекта. Этот итератор годен для одного прохода по набору значений. При работе с итерируемыми объектами обычно не нужно вызывать [`iter()`](https://python-all.ru/2.7/library/functions.html#iter) или самостоятельно иметь дело с объектами-итераторами. Инструкция `for` делает это автоматически, создавая временную безымянную переменную для хранения итератора на время цикла. См. также [итератор](https://python-all.ru/2.7/glossary.html#term-iterator), [последовательность](https://python-all.ru/2.7/glossary.html#term-sequence) и [генератор](https://python-all.ru/2.7/glossary.html#term-generator).248249**итератор**250251Объект, представляющий поток данных. Повторные вызовы метода [`next()`](https://python-all.ru/2.7/reference/expressions.html#generator.next) итератора возвращают последовательные элементы потока. Когда данные заканчиваются, вместо этого возбуждается исключение [`StopIteration`](https://python-all.ru/2.7/library/exceptions.html#exceptions.StopIteration). В этот момент объект-итератор исчерпан, и любые последующие вызовы его метода [`next()`](https://python-all.ru/2.7/reference/expressions.html#generator.next) снова возбуждают [`StopIteration`](https://python-all.ru/2.7/library/exceptions.html#exceptions.StopIteration). Итераторы должны иметь метод [`__iter__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__iter__), который возвращает сам объект итератора, поэтому каждый итератор также является итерируемым и может использоваться в большинстве мест, где принимаются другие итерируемые объекты. Одним заметным исключением является код, который пытается выполнить многократные проходы по итерации. Контейнерный объект (например, `list`) создаёт новый свежий итератор каждый раз, когда вы передаёте его функции [`iter()`](https://python-all.ru/2.7/library/functions.html#iter) или используете в цикле [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for). Попытка сделать то же самое с итератором просто вернёт тот же исчерпанный объект итератора, использованный в предыдущем проходе, из-за чего он будет выглядеть как пустой контейнер.252253Дополнительную информацию можно найти в [Iterator Types](https://python-all.ru/2.7/library/stdtypes.html#typeiter).254255**функция ключа**256257Функция-ключ или функция сортировки – это вызываемый объект, возвращающий значение, используемое для сортировки или упорядочивания. Например, [`locale.strxfrm()`](https://python-all.ru/2.7/library/locale.html#locale.strxfrm) используется для создания ключа сортировки, учитывающего локальные соглашения сортировки.258259Ряд инструментов в Python принимают ключевые функции для управления порядком или группировкой элементов. К ним относятся [`min()`](https://python-all.ru/2.7/library/functions.html#min), [`max()`](https://python-all.ru/2.7/library/functions.html#max), [`sorted()`](https://python-all.ru/2.7/library/functions.html#sorted), `list.sort()`, [`heapq.nsmallest()`](https://python-all.ru/2.7/library/heapq.html#heapq.nsmallest), [`heapq.nlargest()`](https://python-all.ru/2.7/library/heapq.html#heapq.nlargest) и [`itertools.groupby()`](https://python-all.ru/2.7/library/itertools.html#itertools.groupby).260261Существует несколько способов создания ключевой функции. Например, метод [`str.lower()`](https://python-all.ru/2.7/library/stdtypes.html#str.lower) может служить ключевой функцией для сортировки без учёта регистра. В качестве альтернативы можно построить специальную ключевую функцию из выражения [`lambda`](https://python-all.ru/2.7/reference/expressions.html#lambda), такого как `lambda r: (r[0], r[2])`. Кроме того, модуль [`operator`](https://python-all.ru/2.7/library/operator.html#module-operator) предоставляет три конструктора ключевых функций: [`attrgetter()`](https://python-all.ru/2.7/library/operator.html#operator.attrgetter), [`itemgetter()`](https://python-all.ru/2.7/library/operator.html#operator.itemgetter) и [`methodcaller()`](https://python-all.ru/2.7/library/operator.html#operator.methodcaller). Примеры создания и использования ключевых функций см. в [Sorting HOW TO](https://python-all.ru/2.7/howto/sorting.html#sortinghowto).262263**именованный аргумент**264265См. [аргумент](https://python-all.ru/2.7/glossary.html#term-argument).266267**лямбда**268269Анонимная встроенная функция, состоящая из одного [выражения](https://python-all.ru/2.7/glossary.html#term-expression), которое вычисляется при вызове функции. Синтаксис создания лямбда-функции: `lambda [parameters]: expression`270271**LBYL**272273Сначала проверь, потом делай (Look before you leap). Этот стиль кодирования явно проверяет предусловия перед вызовами или обращениями. Этот стиль противоположен подходу [EAFP](https://python-all.ru/2.7/glossary.html#term-eafp) и характеризуется наличием множества инструкций [`if`](https://python-all.ru/2.7/reference/compound_stmts.html#if).274275В многопоточной среде подход LBYL может привести к состоянию гонки между «проверкой» и «действием». Например, код `if key in mapping: return mapping[key]` может завершиться ошибкой, если другой поток удалит *ключ* из *отображения* после проверки, но до обращения. Эту проблему можно решить с помощью блокировок или используя подход EAFP.276277**список**278279Встроенная в Python [последовательность](https://python-all.ru/2.7/glossary.html#term-sequence). Несмотря на название, она больше похожа на массив из других языков, чем на связный список, поскольку доступ к элементам осуществляется за O(1).280281**генератор списка**282283Компактный способ обработки всех или части элементов последовательности и возврата списка с результатами. `result = ["0x%02x" % x for x in range(256) if x % 2 == 0]` генерирует список строк, содержащих чётные шестнадцатеричные числа (0x..) в диапазоне от 0 до 255. Предложение [`if`](https://python-all.ru/2.7/reference/compound_stmts.html#if) является необязательным. Если оно опущено, обрабатываются все элементы в `range(256)`.284285**загрузчик**286287Объект, который загружает модуль. Он должен определять метод с именем `load_module()`. Загрузчик обычно возвращается [искателем](https://python-all.ru/2.7/glossary.html#term-finder). Подробнее см. [**PEP 302**](https://python-all.ru/2.7/glossary.html).288289**магический метод**290291Неформальный синоним [специального метода](https://python-all.ru/2.7/glossary.html#term-special-method).292293**отображение**294295Контейнер, поддерживающий произвольный поиск по ключу и реализующий методы, указанные в [`Mapping`](https://python-all.ru/2.7/library/collections.html#collections.Mapping) или [`MutableMapping`](https://python-all.ru/2.7/library/collections.html#collections.MutableMapping) [абстрактных базовых классов](https://python-all.ru/2.7/library/collections.html#collections-abstract-base-classes). Примеры включают [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict), [`collections.defaultdict`](https://python-all.ru/2.7/library/collections.html#collections.defaultdict), [`collections.OrderedDict`](https://python-all.ru/2.7/library/collections.html#collections.OrderedDict) и [`collections.Counter`](https://python-all.ru/2.7/library/collections.html#collections.Counter).296297**метакласс**298299Класс класса. Определения классов создают имя класса, словарь класса и список базовых классов. Метакласс отвечает за приём этих трёх аргументов и создание класса. Большинство объектно-ориентированных языков программирования предоставляют реализацию по умолчанию. Особенность Python в том, что можно создавать пользовательские метаклассы. Большинству пользователей этот инструмент никогда не понадобится, но когда возникает необходимость, метаклассы могут предоставить мощные и элегантные решения. Они использовались для логирования доступа к атрибутам, добавления потокобезопасности, отслеживания создания объектов, реализации синглтонов и многих других задач.300301Дополнительную информацию можно найти в [Настройка создания классов](https://python-all.ru/2.7/reference/datamodel.html#metaclasses).302303**метод**304305Функция, определённая внутри тела класса. При вызове как атрибут экземпляра этого класса метод получает объект экземпляра в качестве первого [аргумента](https://python-all.ru/2.7/glossary.html#term-argument) (обычно называемого `self`). См. [функцию](https://python-all.ru/2.7/glossary.html#term-function) и [вложенную область видимости](https://python-all.ru/2.7/glossary.html#term-nested-scope).306307**порядок разрешения методов**308309Порядок разрешения методов – это порядок, в котором базовые классы просматриваются для поиска атрибута. См. [Порядок разрешения методов Python 2.3](https://python-all.ru/2.7/glossary.html) для подробностей алгоритма, используемого интерпретатором Python начиная с версии 2.3.310311**модуль**312313Объект, служащий организационной единицей кода Python. Модули имеют пространство имён, содержащее произвольные объекты Python. Модули загружаются в Python в процессе [импортирования](https://python-all.ru/2.7/glossary.html#term-importing).314315См. также [пакет](https://python-all.ru/2.7/glossary.html#term-package).316317**MRO**318319См. [порядок разрешения методов](https://python-all.ru/2.7/glossary.html#term-method-resolution-order).320321**изменяемый**322323Изменяемые объекты могут менять своё значение, но сохраняют свой [`id()`](https://python-all.ru/2.7/library/functions.html#id). См. также [неизменяемый](https://python-all.ru/2.7/glossary.html#term-immutable).324325**именованный кортеж**326327Любой класс, похожий на кортеж, чьи индексируемые элементы также доступны через именованные атрибуты (например, [`time.localtime()`](https://python-all.ru/2.7/library/time.html#time.localtime) возвращает объект, похожий на кортеж, где *year* доступен либо по индексу, например `t[0]`, либо через именованный атрибут, например `t.tm_year`).328329Именованный кортеж может быть встроенным типом, таким как [`time.struct_time`](https://python-all.ru/2.7/library/time.html#time.struct_time), или может быть создан с помощью обычного определения класса. Полнофункциональный именованный кортеж также может быть создан с помощью фабричной функции [`collections.namedtuple()`](https://python-all.ru/2.7/library/collections.html#collections.namedtuple). Последний подход автоматически предоставляет дополнительные возможности, такие как самодокументируемое представление, например `Employee(name='jones', title='programmer')`.330331**пространство имён**332333Место хранения переменной. Пространства имён реализованы как словари. Существуют локальное, глобальное и встроенное пространства имён, а также вложенные пространства имён в объектах (в методах). Пространства имён способствуют модульности, предотвращая конфликты имён. Например, функции `__builtin__.open()` и [`os.open()`](https://python-all.ru/2.7/library/os.html#os.open) различаются своими пространствами имён. Пространства имён также улучшают читаемость и сопровождаемость, позволяя понять, какой модуль реализует функцию. Например, запись [`random.seed()`](https://python-all.ru/2.7/library/random.html#random.seed) или [`itertools.izip()`](https://python-all.ru/2.7/library/itertools.html#itertools.izip) показывает, что эти функции реализованы модулями [`random`](https://python-all.ru/2.7/library/random.html#module-random) и [`itertools`](https://python-all.ru/2.7/library/itertools.html#module-itertools) соответственно.334335**вложенная область видимости**336337Возможность ссылаться на переменную во внешнем определении. Например, функция, определённая внутри другой функции, может ссылаться на переменные внешней функции. Обратите внимание: вложенные области видимости работают только для чтения, а не для присваивания, которое всегда записывает в самую внутреннюю область. В отличие от этого, локальные переменные и читаются, и записываются в самой внутренней области. Аналогично, глобальные переменные читаются и записываются в глобальном пространстве имён.338339**класс нового стиля**340341Любой класс, наследующий от [`object`](https://python-all.ru/2.7/library/functions.html#object). Сюда входят все встроенные типы, такие как `list` и [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict). Только классы нового стиля могут использовать новые, многофункциональные возможности Python, такие как `__slots__`, дескрипторы, свойства и [`__getattribute__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getattribute__).342343Дополнительную информацию можно найти в [Классы нового и классического стиля](https://python-all.ru/2.7/reference/datamodel.html#newstyle).344345**объект**346347Любые данные с состоянием (атрибуты или значение) и определённым поведением (методы). Также конечный базовый класс любого [класса нового стиля](https://python-all.ru/2.7/glossary.html#term-new-style-class).348349**пакет**350351Модуль Python [модуль](https://python-all.ru/2.7/glossary.html#term-module), который может содержать подмодули или, рекурсивно, подпакеты. Технически пакет – это модуль Python с атрибутом `__path__`.352353**параметр**354355Именованная сущность в определении [функции](https://python-all.ru/2.7/glossary.html#term-function) (или метода), которая указывает [аргумент](https://python-all.ru/2.7/glossary.html#term-argument) (или в некоторых случаях аргументы), которые функция может принимать. Существует четыре типа параметров:356357- *позиционный или ключевой*: указывает аргумент, который может быть передан либо [позиционно](https://python-all.ru/2.7/glossary.html#term-argument), либо в качестве [ключевого аргумента](https://python-all.ru/2.7/glossary.html#term-argument). Это вид параметра по умолчанию, например *foo* и *bar* в следующем примере:358359  ```python360  def func(foo, bar=None): ...361  ```362- *позиционно-только*: указывает аргумент, который может быть передан только по позиции. В Python нет синтаксиса для определения позиционно-только параметров. Однако некоторые встроенные функции имеют позиционно-только параметры (например, [`abs()`](https://python-all.ru/2.7/library/functions.html#abs)).363- *вариативно-позиционный*: указывает, что может быть предоставлена произвольная последовательность позиционных аргументов (в дополнение к любым позиционным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `*` перед именем параметра, например *args* в следующем примере:364365  ```python366  def func(*args, **kwargs): ...367  ```368- *вариативно-ключевой*: указывает, что может быть предоставлено произвольно много именованных аргументов (в дополнение к любым именованным аргументам, уже принимаемым другими параметрами). Такой параметр можно определить, добавив `**` перед именем параметра, например *kwargs* в примере выше.369370Параметры могут определять как необязательные, так и обязательные аргументы, а также значения по умолчанию для некоторых необязательных аргументов.371372См. также глоссарий [аргумент](https://python-all.ru/2.7/glossary.html#term-argument), вопрос из FAQ о [разнице между аргументами и параметрами](https://python-all.ru/2.7/faq/programming.html#faq-argument-vs-parameter), а также раздел [Определения функций](https://python-all.ru/2.7/reference/compound_stmts.html#function).373374**PEP**375376Python Enhancement Proposal. PEP – это проектный документ, предоставляющий информацию сообществу Python или описывающий новую возможность для Python, его процессов или окружения. PEP должны содержать краткую техническую спецификацию и обоснование предлагаемых возможностей.377378PEP предназначены быть основным механизмом для предложения крупных новых возможностей, сбора мнений сообщества по какому-либо вопросу и документирования проектных решений, принятых в Python. Автор PEP отвечает за достижение консенсуса в сообществе и документирование особых мнений.379380См. [**PEP 1**](https://python-all.ru/2.7/glossary.html).381382**позиционный аргумент**383384См. [аргумент](https://python-all.ru/2.7/glossary.html#term-argument).385386**Python 3000**387388Прозвище для линейки релизов Python 3.x (придумано давно, когда выпуск версии 3 был чем-то из далёкого будущего). Также сокращённо называется «Py3k».389390**Питоничный**391392Идея или фрагмент кода, который строго следует наиболее распространённым идиомам языка Python, а не реализует код с использованием концепций, общих для других языков. Например, распространённая идиома в Python – цикл по всем элементам итерируемого объекта с помощью оператора [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for). Многие другие языки не имеют такой конструкции, поэтому люди, незнакомые с Python, иногда используют вместо этого числовой счётчик:393394```python395for i in range(len(food)):396    print food[i]397```398399В отличие от более чистого, питоничного метода:400401```python402for piece in food:403    print piece404```405406**счётчик ссылок**407408Количество ссылок на объект. Когда счётчик ссылок объекта падает до нуля, объект освобождается. Подсчёт ссылок обычно невидим для кода Python, но является ключевым элементом реализации [CPython](https://python-all.ru/2.7/glossary.html#term-cpython). Модуль [`sys`](https://python-all.ru/2.7/library/sys.html#module-sys) определяет функцию [`getrefcount()`](https://python-all.ru/2.7/library/sys.html#sys.getrefcount), которую программисты могут вызывать для получения счётчика ссылок для конкретного объекта.409410**slots**411412Объявление внутри [класса нового стиля](https://python-all.ru/2.7/glossary.html#term-new-style-class), которое экономит память за счёт предварительного резервирования места для атрибутов экземпляра и устранения словарей экземпляров. Хотя эта техника популярна, её правильное применение несколько затруднительно, и её лучше приберечь для редких случаев, когда имеется большое количество экземпляров в приложении, критичном к памяти.413414**последовательность**415416[Итерируемый объект](https://python-all.ru/2.7/glossary.html#term-iterable), который поддерживает эффективный доступ к элементам по целочисленным индексам через специальный метод [`__getitem__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getitem__) и определяет метод [`len()`](https://python-all.ru/2.7/library/functions.html#len), возвращающий длину последовательности. Некоторые встроенные типы последовательностей: `list`, [`str`](https://python-all.ru/2.7/library/functions.html#str), [`tuple`](https://python-all.ru/2.7/library/functions.html#tuple) и [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode). Обратите внимание, что [`dict`](https://python-all.ru/2.7/library/stdtypes.html#dict) также поддерживает [`__getitem__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getitem__) и [`__len__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__len__), но считается отображением, а не последовательностью, так как поиск использует произвольные [неизменяемые](https://python-all.ru/2.7/glossary.html#term-immutable) ключи, а не целые числа.417418**срез**419420Объект, обычно содержащий часть [последовательности](https://python-all.ru/2.7/glossary.html#term-sequence). Срез создаётся с помощью индексации, `[]` с двоеточиями между числами, когда их несколько, например в `variable_name[1:3:5]`. Внутри индексация использует объекты [`slice`](https://python-all.ru/2.7/library/functions.html#slice) (или в старых версиях [`__getslice__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getslice__) и [`__setslice__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__setslice__)).421422**специальный метод**423424A 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 in [Special method names](https://python-all.ru/2.7/reference/datamodel.html#specialnames).425426**инструкция**427428A statement is part of a suite (a “block” of code). A statement is either an [expression](https://python-all.ru/2.7/glossary.html#term-expression) or one of several constructs with a keyword, such as [`if`](https://python-all.ru/2.7/reference/compound_stmts.html#if), [`while`](https://python-all.ru/2.7/reference/compound_stmts.html#while) or [`for`](https://python-all.ru/2.7/reference/compound_stmts.html#for).429430**Структурированная последовательность**431432Кортеж с именованными элементами. Структурные последовательности предоставляют интерфейс, похожий на [именованный кортеж](https://python-all.ru/2.7/glossary.html#term-named-tuple), в том смысле, что элементы можно получать либо по индексу, либо как атрибут. Однако у них нет методов именованного кортежа, таких как [`_make()`](https://python-all.ru/2.7/library/collections.html#collections.somenamedtuple._make) или [`_asdict()`](https://python-all.ru/2.7/library/collections.html#collections.somenamedtuple._asdict). Примеры структурных последовательностей включают [`sys.float_info`](https://python-all.ru/2.7/library/sys.html#sys.float_info) и возвращаемое значение [`os.stat()`](https://python-all.ru/2.7/library/os.html#os.stat).433434**строка в тройных кавычках**435436Строка, ограниченная тремя экземплярами либо кавычек («), либо апострофов ('). Хотя они не предоставляют никаких возможностей, недоступных для строк в одинарных кавычках, они полезны по ряду причин. Они позволяют включать в строку неэкранированные одинарные и двойные кавычки и могут занимать несколько строк без использования символа продолжения, что делает их особенно полезными при написании докстрингов.437438**тип**439440Тип объекта Python определяет, что это за объект; каждый объект имеет тип. Тип объекта доступен как его атрибут [`__class__`](https://python-all.ru/2.7/library/stdtypes.html#instance.__class__) или может быть получен с помощью `type(obj)`.441442**универсальные символы новой строки**443444Способ интерпретации текстовых потоков, при котором все следующие символы распознаются как конец строки: соглашение Unix о конце строки `'\n'`, соглашение Windows `'\r\n'` и старое соглашение Macintosh `'\r'`. См. [**PEP 278**](https://python-all.ru/2.7/glossary.html) и [**PEP 3116**](https://python-all.ru/2.7/glossary.html), а также [`str.splitlines()`](https://python-all.ru/2.7/library/stdtypes.html#str.splitlines) для дополнительного применения.445446**виртуальное окружение**447448Кооперативно изолированная среда выполнения, которая позволяет пользователям Python и приложениям устанавливать и обновлять пакеты распространения Python, не влияя на поведение других приложений Python, запущенных в той же системе.449450**виртуальная машина**451452Компьютер, полностью определённый в программном обеспечении. Виртуальная машина Python выполняет [байт-код](https://python-all.ru/2.7/glossary.html#term-bytecode), генерируемый компилятором байт-кода.453454**Дзен Python**455456Перечень принципов проектирования и философии Python, полезных для понимания и использования языка. Этот перечень можно найти, введя “`import this`” в интерактивном приглашении.457