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

ГлоссарийGlossary

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

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

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

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

Значение, передаваемое функции или методу, присваиваемое именованной локальной переменной в теле функции. Функция или метод могут иметь как позиционные аргументы, так и именованные аргументы в своём определении. Позиционные и именованные аргументы могут быть переменной длины: * принимает или передаёт (в определении или вызове функции) несколько позиционных аргументов в виде списка, а ** делает то же самое для именованных аргументов в виде словаря.

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

атрибут
Значение, связанное с объектом, на которое ссылаются по имени с помощью выражений с точкой. Например, если объект o имеет атрибут a, на него можно сослаться как o.a.
BDFL
Доброжелательный диктатор на всю жизнь, также известный как Гвидо ван Россум, создатель Python.
байткод
Исходный код Python компилируется в байткод – внутреннее представление программы Python в интерпретаторе. Байткод также кэшируется в файлах .pyc и .pyo, чтобы при повторном выполнении того же файла это было быстрее (можно избежать перекомпиляции из исходного кода в байткод). Этот «промежуточный язык» выполняется на виртуальной машине, которая исполняет машинный код, соответствующий каждому байткоду.
класс
Шаблон для создания пользовательских объектов. Определения классов обычно содержат определения методов, которые работают с экземплярами класса.
классический класс
Любой класс, который не наследуется от object. См. классы нового стиля. Классы классического стиля будут удалены в Python 3.0.
приведение типов
Неявное преобразование экземпляра одного типа в другой при выполнении операции, которая включает два аргумента одного типа. Например, 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.
комплексное число
Расширение привычной системы действительных чисел, в котором все числа выражаются как сумма действительной и мнимой части. Мнимые числа – это действительные кратные мнимой единицы (квадратный корень из -1), часто записываемой как i в математике или j в технике. Python имеет встроенную поддержку комплексных чисел, которые записываются в последнем обозначении; мнимая часть записывается с суффиксом j, например, 3+1j. Для доступа к комплексным аналогам модуля math используйте cmath. Использование комплексных чисел – довольно продвинутая математическая возможность. Если вы не осознаёте необходимости в них, почти наверняка их можно безопасно игнорировать.
контекстный менеджер
Объект, который управляет окружением, видимым в операторе with, определяя методы __enter__() и __exit__(). См. PEP 343.
CPython
Каноническая реализация языка программирования Python. Термин «CPython» используется в контекстах, где необходимо отличать эту реализацию от других, таких как Jython или IronPython.
декоратор

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

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

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

@staticmethod
def f(...):
    ...

См. документацию по определению функций для получения дополнительной информации о декораторах.

дескриптор

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

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

словарь
Ассоциативный массив, в котором произвольные ключи сопоставляются значениям. Использование dict очень похоже на использование list, но ключи могут быть любыми объектами с функцией __hash__(), а не только целыми числами. В Perl называется хешем.
докстринг
Строковый литерал, который появляется как первое выражение в классе, функции или модуле. Хотя он игнорируется при выполнении блока, он распознаётся компилятором и помещается в атрибут __doc__ окружающего класса, функции или модуля. Поскольку он доступен через интроспекцию, это каноническое место для документации объекта.
утиная типизация
Стиль программирования на Python, в котором тип объекта определяется по его методам или сигнатуре атрибутов, а не по явной принадлежности к некоторому типу («Если это выглядит как утка и крякает как утка, то это, должно быть, утка»). Упор на интерфейсы, а не на конкретные типы, позволяет хорошо спроектированному коду быть более гибким за счет полиморфной подстановки. Утиная типизация избегает проверок с помощью type() или isinstance(). (Однако утиная типизация может дополняться абстрактными базовыми классами.) Вместо этого обычно используются проверки hasattr() или программирование в стиле EAFP.
EAFP
Проще попросить прощения, чем разрешения. Этот распространённый стиль программирования на Python предполагает существование правильных ключей или атрибутов и перехватывает исключения, если предположение оказывается неверным. Этот чистый и быстрый стиль характеризуется наличием множества операторов try и except. Этот подход контрастирует со стилем LBYL, распространённым во многих других языках, таких как C.
выражение
Часть синтаксиса, которая может быть вычислена в некоторое значение. Другими словами, выражение – это совокупность элементов выражения, таких как литералы, имена, доступ к атрибутам, операторы или вызовы функций, которые возвращают значение. В отличие от многих других языков, не все языковые конструкции являются выражениями. Существуют также инструкции, которые нельзя использовать как выражения, например print или if. Присваивания также являются инструкциями, а не выражениями.
модуль-расширение
Модуль, написанный на C или C++, использующий C API Python для взаимодействия с ядром и пользовательским кодом.
искатель
Объект, который пытается найти загрузчик для модуля. Он должен реализовывать метод с именем find_module(). Подробнее см. PEP 302.
функция
Последовательность инструкций, возвращающая значение вызывающему коду. Ей также может быть передано ноль или более аргументов, которые могут использоваться при выполнении тела. См. также аргумент и метод.
future

Псевдомодуль, который программисты могут использовать для включения новых возможностей языка, несовместимых с текущим интерпретатором. Например, выражение 11/4 в настоящее время вычисляется как 2. Если в модуле, в котором оно выполняется, было включено настоящее деление с помощью выполнения:

from __future__ import division

выражение 11/4 вычислялось бы как 2.75. Импортировав модуль __future__ и вычислив его переменные, можно узнать, когда новая возможность была впервые добавлена в язык и когда она станет поведением по умолчанию:

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
сборка мусора
Процесс освобождения памяти, когда она больше не используется. Python выполняет сборку мусора с помощью подсчёта ссылок и циклического сборщика мусора, который способен обнаруживать и разрывать циклические ссылки.
генератор
Функция, которая возвращает итератор. Она выглядит как обычная функция, за исключением того, что значения возвращаются вызывающей стороне с помощью оператора yield вместо оператора return. Функции-генераторы часто содержат один или несколько циклов for или while, которые yield элементы обратно вызывающей стороне. Выполнение функции останавливается на ключевом слове yield (возвращая результат) и возобновляется с этого места, когда следующий элемент запрашивается вызовом метода next() возвращённого итератора.
генераторное выражение

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

>>> sum(i*i for i in range(10))         # сумма квадратов 0, 1, 4, ... 81
285
GIL
См. глобальная блокировка интерпретатора.
глобальная блокировка интерпретатора
Блокировка, используемая потоками Python для гарантии того, что только один поток выполняется в CPython виртуальной машине в каждый момент времени. Это упрощает реализацию CPython, гарантируя, что никакие два процесса не могут одновременно получить доступ к одной и той же памяти. Блокировка всего интерпретатора упрощает его многопоточность, но ценой потери значительной части параллелизма, обеспечиваемого многопроцессорными машинами. В прошлом предпринимались попытки создать «свободно-поточный» интерпретатор (такой, который блокирует разделяемые данные с гораздо более мелкой гранулярностью), но пока ни одна из них не увенчалась успехом, поскольку производительность страдала в обычном однопроцессорном случае.
хешируемый

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

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

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

IDLE
Интегрированная среда разработки для Python. IDLE – это базовый редактор и среда интерпретатора, поставляемые со стандартным дистрибутивом Python. Подходит для начинающих, а также служит наглядным примером кода для тех, кто хочет реализовать умеренно сложное многоплатформенное GUI-приложение.
неизменяемый
Объект с фиксированным значением. К неизменяемым объектам относятся числа, строки и кортежи. Такой объект нельзя изменить. Если требуется сохранить другое значение, необходимо создать новый объект. Они играют важную роль там, где требуется постоянное хеш-значение, например в качестве ключа в словаре.
целочисленное деление
Математическое деление с отбрасыванием остатка. Например, выражение 11/4 в настоящее время вычисляется как 2 в отличие от 2.75, возвращаемого делением с плавающей точкой. Также называется целочисленным делением (floor division). При делении двух целых чисел результатом всегда будет другое целое число (к нему применяется функция floor). Однако если один из операндов имеет другой числовой тип (например, float), результат будет приведён (см. приведение) к общему типу. Например, целое число, разделённое на число с плавающей точкой, даст значение с плавающей точкой, возможно, с десятичной дробью. Целочисленное деление можно принудительно выполнить с помощью оператора // вместо оператора /. См. также __future__.
импортёр
Объект, который одновременно находит и загружает модуль; объект, являющийся как искателем, так и загрузчиком.
интерактивный
Python включает интерактивный интерпретатор: можно вводить инструкции и выражения в приглашении интерпретатора, сразу же выполнять их и видеть результат. Просто запустите python без аргументов (возможно, выбрав его из главного меню компьютера). Это очень удобный способ опробовать новые идеи или изучить модули и пакеты (вспомните help(x)).
интерпретируемый
Python является интерпретируемым языком, в отличие от компилируемых, хотя различие может быть размытым из-за наличия компилятора байткода. Это означает, что исходные файлы можно запускать напрямую, без явного создания исполняемого файла, который затем выполняется. Интерпретируемые языки обычно имеют более короткий цикл разработки/отладки, чем компилируемые, хотя их программы, как правило, выполняются медленнее. См. также интерактивный.
итерируемый объект
Объект-контейнер, способный возвращать свои элементы по одному за раз. Примеры итерируемых объектов включают все типы последовательностей (такие как list, str и tuple) и некоторые типы, не являющиеся последовательностями, такие как dict и file, а также объекты любых классов, определённых с методом __iter__() или __getitem__(). Итерируемые объекты можно использовать в цикле for и во многих других местах, где требуется последовательность (zip(), map(), ...). Когда итерируемый объект передаётся в качестве аргумента встроенной функции iter(), она возвращает итератор для этого объекта. Этот итератор предназначен для одного прохода по набору значений. При использовании итерируемых объектов обычно не нужно вызывать iter() или самостоятельно работать с объектами-итераторами. Оператор for делает это автоматически, создавая временную безымянную переменную для хранения итератора на время выполнения цикла. См. также iterator, sequence и generator.
итератор

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

Дополнительную информацию можно найти в Iterator Types.

именованный аргумент
Аргументы, перед которыми в вызове стоит variable_name=. Имя переменной обозначает локальное имя в функции, которому присваивается значение. ** используется для принятия или передачи словаря именованных аргументов. См. аргумент.
лямбда
Анонимная встроенная функция, состоящая из одного выражения, которое вычисляется при вызове функции. Синтаксис создания лямбда-функции: lambda [аргументы]: выражение
LBYL
Сначала подумай, потом делай (Look before you leap). Этот стиль кодирования явно проверяет предусловия перед выполнением вызовов или поиском. Этот стиль противопоставляется подходу EAFP и характеризуется наличием множества инструкций if.
список
Встроенная в Python последовательность. Несмотря на название, она больше похожа на массив в других языках, чем на связный список, поскольку доступ к элементам осуществляется за O(1).
генератор списка
Компактный способ обработки всех или части элементов последовательности и возврата списка результатов. result = ["0x%02x" % x for x in range(256) if x % 2 == 0] генерирует список строк, содержащих чётные шестнадцатеричные числа (0x..) в диапазоне от 0 до 255. Предложение if необязательно. Если оно опущено, обрабатываются все элементы в range(256).
загрузчик
Объект, который загружает модуль. Он должен определять метод с именем load_module(). Загрузчик обычно возвращается искателем (finder). Подробнее см. PEP 302.
отображение
Объект-контейнер (например, dict), поддерживающий поиск по произвольным ключам с помощью специального метода __getitem__().
метакласс

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

Дополнительную информацию можно найти в Настройка создания классов.

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

Любой класс, подобный кортежу, индексируемые элементы которого также доступны через именованные атрибуты (например, time.localtime() возвращает подобный кортежу объект, в котором year доступен либо по индексу, например t[0], либо через именованный атрибут, например t.tm_year).

Именованный кортеж может быть встроенным типом, например time.struct_time, или может быть создан с помощью обычного определения класса. Полнофункциональный именованный кортеж также можно создать с помощью фабричной функции collections.namedtuple(). Последний подход автоматически предоставляет дополнительные возможности, такие как самодокументируемое представление, например Employee(name='jones', title='programmer').

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

Любой класс, который наследуется от object. Сюда входят все встроенные типы, такие как list и dict. Только классы нового стиля могут использовать новые универсальные возможности Python, такие как __slots__, дескрипторы, свойства и __getattribute__().

Дополнительную информацию можно найти в Классы нового и классического стиля.

объект
Любые данные с состоянием (атрибуты или значение) и определённым поведением (методы). Также конечный базовый класс любого класса нового стиля.
позиционный аргумент
Аргументы, присвоенные локальным именам внутри функции или метода, определяемые порядком, в котором они были переданы в вызове. * используется либо для принятия нескольких позиционных аргументов (в определении), либо для передачи нескольких аргументов в виде списка функции. См. аргумент.
Python 3000
Прозвище для следующей крупной версии Python, 3.0 (придуманное давно, когда выпуск версии 3 был чем-то в далёком будущем). Также сокращённо называется «Py3k».
Питоничный

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

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

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

for piece in food:
    print piece
счётчик ссылок
Количество ссылок на объект. Когда счётчик ссылок объекта падает до нуля, он освобождается. Подсчёт ссылок обычно не виден в коде Python, но является ключевым элементом реализации CPython. Модуль sys определяет функцию getrefcount(), которую программисты могут вызывать для получения счётчика ссылок для конкретного объекта.
slots
Объявление внутри класса нового стиля, которое экономит память за счёт предварительного резервирования места для атрибутов экземпляра и устранения словарей экземпляров. Хотя эта техника популярна, её правильное применение несколько затруднительно, и её лучше приберечь для редких случаев, когда имеется большое количество экземпляров в приложении, критичном к памяти.
последовательность
Итерируемый объект, который поддерживает эффективный доступ к элементам по целочисленным индексам через специальный метод __getitem__() и определяет метод len(), возвращающий длину последовательности. Некоторые встроенные типы последовательностей: list, str, tuple и unicode. Обратите внимание, что dict также поддерживает __getitem__() и __len__(), но считается отображением, а не последовательностью, поскольку поиск использует произвольные неизменяемые ключи, а не целые числа.
срез
An object usually containing a portion of a sequence. A slice is created using the subscript notation, [] with colons between numbers when several are given, such as in variable_name[1:3:5]. The bracket (subscript) notation uses slice objects internally (or in older versions, __getslice__() and __setslice__()).
специальный метод
A 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.
инструкция
Инструкция является частью блока кода. Инструкция – это либо выражение, либо одна из нескольких конструкций с ключевым словом, например if, while или print.
строка в тройных кавычках
Строка, ограниченная тремя экземплярами либо кавычек («), либо апострофов ('). Хотя они не предоставляют никаких возможностей, недоступных для строк в одинарных кавычках, они полезны по ряду причин. Они позволяют включать в строку неэкранированные одинарные и двойные кавычки и могут занимать несколько строк без использования символа продолжения, что делает их особенно полезными при написании докстрингов.
тип
Тип объекта Python определяет, что это за объект; каждый объект имеет тип. Тип объекта доступен как его атрибут __class__ или может быть получен с помощью type(obj).
виртуальная машина
Компьютер, полностью определённый в программном обеспечении. Виртуальная машина Python выполняет байт-код, генерируемый компилятором байт-кода.
Дзен Python
Перечень принципов и философии проектирования Python, полезных для понимания и использования языка. Этот перечень можно получить, введя в интерактивном режиме «import this».