Python (язык программирования) - Python (programming language)

Python
Логотип Python и wordmark.svg
ПарадигмаМультипарадигма: функциональный, императив, объектно-ориентированный, структурированный, отражающий
РазработаноГвидо ван Россум
РазработчикФонд программного обеспечения Python
Впервые появился1991; 29 лет назад (1991)[1]
Стабильный выпуск
3.9.1 / 7 декабря 2020 г.; 7 дней назад (2020-12-07)[2]
Предварительный выпуск
3.10.0a3 / 7 декабря 2020; 7 дней назад (2020-12-07)[3]
Печатная дисциплинаУтка, динамичный, постепенный (с версии 3.5)[4]
Операционные системыLinux, macOS, Windows 8 и позже
и больше
ЛицензияЛицензия Python Software Foundation
Расширения имени файла.py, .pyi, .pyc, .pyd, .pyo (до 3.5),[5] .pyw, .pyz (начиная с версии 3.5)[6]
Интернет сайтwww.python.org
Основной реализации
CPython, PyPy, Безстековый Python, MicroPython, CircuitPython, IronPython, Jython, RustPython
Диалекты
Cython, RPython, Старларк[7]
Под влиянием
ABC,[8] Ада,[9] АЛГОЛ 68,[10] APL,[11] C,[12] C ++,[13] CLU,[14] Дилан,[15] Haskell,[16] Значок,[17] Ява,[18] Лисп,[19] Модула-3,[13] Perl, Стандартный ML[11]
Под влиянием
Apache Groovy, Бу, Кобра, CoffeeScript,[20] D, F #, Джинн,[21] Идти, JavaScript,[22][23] Юля,[24] Ним, Звенеть,[25] Рубин,[26] Быстрый[27]

Python является интерпретированный, высокий уровень и язык программирования общего назначения. Философия дизайна Python подчеркивает читаемость кода с его заметным использованием значительный пробел. Его языковые конструкции и объектно-ориентированный подход стремиться помочь программисты писать понятный, логичный код для малых и крупных проектов.[28]

Python - это динамически типизированный и сборщик мусора. Он поддерживает несколько парадигмы программирования, включая структурированный (особенно, процедурный ), объектно-ориентированный, и функциональное программирование. Python часто описывается как язык с "включенными батареями" из-за его всеобъемлющего стандартная библиотека.[29]

Python был создан в конце 1980-х годов и впервые выпущен в 1991 году компанией Гвидо ван Россум как преемник Язык программирования ABC. Python 2.0, выпущенный в 2000 году, представил новые функции, такие как составить список, и систему сбора мусора с подсчет ссылок, и был прекращен с версией 2.7 в 2020 году.[30] Python 3.0, выпущенный в 2008 году, был серьезной пересмотром языка, который не полностью обратно совместимый и большая часть кода Python 2 не запускается без изменений на Python 3. С Python 2 конец жизни, только Python 3.6.x[31] и более поздние версии поддерживаются, более старые версии по-прежнему поддерживаются, например Windows 7 (и старые установщики не ограничиваются 64-битной Windows).

Python переводчики поддерживаются для основных операционные системы и доступно еще для нескольких (а в прошлом поддерживалось еще много). Мировое сообщество программистов разрабатывает и поддерживает CPython, а бесплатно и с открытым исходным кодом[32] эталонная реализация. Некоммерческая организация, Фонд программного обеспечения Python, управляет и направляет ресурсы для разработки Python и CPython. В настоящее время он связан с Ява как второй по популярности язык программирования в мире.[33][34]

История

Python был задуман в конце 1980-х годов.[35] к Гвидо ван Россум в Centrum Wiskunde & Informatica (CWI) в Нидерланды как преемник Язык программирования ABC, который был вдохновлен SETL ),[36] способен Обработка исключений и взаимодействие с Амеба Операционная система.[8] Его реализация началась в декабре 1989 года.[37] Ван Россум взял на себя исключительную ответственность за проект в качестве ведущего разработчика до 12 июля 2018 года, когда он объявил о своем «постоянном отпуске» из-за своих обязанностей в качестве руководителя Python. Доброжелательный диктатор на всю жизнь - звание, присвоенное ему сообществом Python, чтобы отразить его долгосрочное обязательство в качестве лица, принимающего решения по проекту.[38] Теперь он разделяет свое лидерство в качестве члена руководящего совета из пяти человек.[39][40][41] В январе 2019 года активные разработчики ядра Python избрали Бретта Кэннона, Ника Коглана, Барри Варшаву, Кэрол Виллинг и Ван Россум в «Руководящий совет» из пяти человек для руководства проектом.[42] С тех пор Гвидо ван Россум снял свою кандидатуру в Руководящий совет 2020 года.[43]

Python 2.0 был выпущен 16 октября 2000 года с множеством основных новых функций, включая детектирование цикла уборщик мусора и поддержка Unicode.[44]

Python 3.0 был выпущен 3 декабря 2008 года. Это была крупная версия языка, которая не полностью обратно совместимый.[45] Многие из его основных функций были портированный в Python 2.6.x[46] и версии 2.7.x. Релизы Python 3 включают 2to3 утилита, которая автоматизирует (по крайней мере частично) перевод кода Python 2 в Python 3.[47]

Python 2.7's конец жизни Первоначально дата была установлена ​​на 2015 год, а затем перенесена на 2020 год из-за опасений, что большая часть существующего кода не может быть легко перенесена на Python 3.[48][49] Для него больше не будет выпущено никаких исправлений безопасности или других улучшений.[50][51] С Python 2 конец жизни, только Python 3.6.x[52] и более поздние версии поддерживаются.

Философия дизайна и особенности

Python - это язык программирования с несколькими парадигмами. Объектно-ориентированного программирования и структурное программирование полностью поддерживаются, и многие из его функций поддерживают функциональное программирование и аспектно-ориентированное программирование (в том числе метапрограммирование[53] и метаобъекты (магические методы)).[54] Многие другие парадигмы поддерживаются расширениями, включая дизайн по контракту[55][56] и логическое программирование.[57]

Python использует динамическая типизация и сочетание подсчет ссылок и сборщик мусора с обнаружением циклов для управление памятью.[58] Он также имеет динамические разрешение имени (позднее связывание ), который связывает имена методов и переменных во время выполнения программы.

Дизайн Python предлагает некоторую поддержку функциональное программирование в Лисп традиция. Она имеет фильтр, карта, и уменьшать функции; составить список, словари, наборы и генератор выражения.[59] Стандартная библиотека имеет два модуля (itertools и functools), которые реализуют функциональные инструменты, заимствованные из Haskell и Стандартный ML.[60]

Основная философия языка кратко изложена в документе. В Дзен Python (PEP 20), который включает афоризмы Такие как:[61]

  • Красивое лучше уродливого.
  • Явное лучше, чем неявное.
  • Лучше простое, чем сложное.
  • Сложный лучше, чем сложный.
  • Читаемость имеет значение.

Вместо того, чтобы иметь все функциональные возможности, встроенные в ядро, Python был разработан так, чтобы расширяемый. Эта компактная модульность сделала его особенно популярным как средство добавления программируемых интерфейсов к существующим приложениям. Представление Ван Россума о небольшом базовом языке с большой стандартной библиотекой и легко расширяемым интерпретатором возникло из-за его разочарования ABC, который придерживался противоположного подхода.[35]

Python стремится к более простому и менее загроможденному синтаксису и грамматике, давая разработчикам возможность выбора в своей методологии кодирования. В отличие от Perl "s"есть несколько способов сделать это Девиз, Python поддерживает философию дизайна «должен быть один - а желательно только один - очевидный способ сделать это».[61] Алекс Мартелли, а Парень на Фонд программного обеспечения Python и автор книги Python, пишет, что «описывать что-либо как« умное » нет считается комплиментом в культуре Python ».[62]

Разработчики Python стараются избегать преждевременная оптимизация, и отклонить исправления для некритичных частей CPython эталонная реализация, которая предложит незначительное увеличение скорости за счет ясности.[63] Когда важна скорость, программист Python может переместить критичные ко времени функции в модули расширения, написанные на таких языках, как C, или использовать PyPy, а своевременный компилятор. Cython также доступен, который переводит скрипт Python в C и выполняет прямые вызовы API уровня C в интерпретатор Python.

Важная цель разработчиков Python - сделать его интересным в использовании. Это отражено в названии языка - дань уважения британской комедийной группе. Монти Пайтон[64]- а иногда и в шутливых подходах к учебным пособиям и справочным материалам, например, к примерам спама и яиц (из знаменитый эскиз Монти Пайтона ) вместо стандартного foo и bar.[65][66]

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

Пользователей и почитателей Python, особенно тех, кого считают хорошо осведомленными или опытными, часто называют Питонисты.[67][68]

Синтаксис и семантика

Python задуман как легко читаемый язык. Его форматирование визуально не загромождено, и в нем часто используются ключевые слова на английском языке, а в других языках используются знаки препинания. В отличие от многих других языков, он не использует фигурные скобки для разделения блоков, а точка с запятой после операторов не обязательна. В нем меньше синтаксических исключений и особых случаев, чем C или же Паскаль.[69]

Отступ

Python использует пробел отступ, а не фигурные скобки или ключевые слова, чтобы ограничить блоки. Увеличение отступа происходит после определенных утверждений; уменьшение отступа означает конец текущего блока.[70] Таким образом, визуальная структура программы точно представляет семантическую структуру программы.[1] Эту функцию иногда называют вне игры, который разделяют некоторые другие языки, но в большинстве языков отступы не имеют семантического значения.

Заявления и поток управления

Python заявления включают (среди прочего):

  • Оператор присваивания (токен '=', знак равенства). Это работает иначе, чем в традиционных императивное программирование языков, и этот фундаментальный механизм (включая природу версии Python переменные) освещает многие другие особенности языка. Присвоение в C, например, х = 2, переводится как "типизированное имя переменной Икс получает копию числового значения 2 ". Значение (справа) копируется в выделенное место хранения для которого (левая) имя переменной это символический адрес. Память, выделенная для переменной, достаточно велика (потенциально довольно большая) для заявленного тип. В простейшем случае присваивания Python, используя тот же пример, х = 2, переводится как "(общее) имя x получает ссылка в отдельный, динамически выделяемый объект числового (int) типа значения 2. "Это называется привязка имя объекта. Поскольку место хранения имени не содержать указанное значение, неправильно называть его Переменная. Имена могут быть впоследствии повторно привязаны в любое время к объектам самых разных типов, включая строки, процедуры, сложные объекты с данными и методами и т. Д. Последовательное присвоение общего значения нескольким именам, например, Икс = 2; у = 2; z = 2 приводят к выделению памяти (максимум) для трех имен и одного числового объекта, к которому привязаны все три имени. Поскольку имя является универсальным держателем ссылки, неразумно связывать фиксированный тип данных с этим. Однако в определенный момент имя будет привязано к немного объект, который буду иметь типаж; таким образом, есть динамическая типизация.
  • В если оператор, который условно выполняет блок кода вместе с еще и Элиф (сокращение else-if).
  • В за оператор, который выполняет итерацию по итерируемому объекту, записывая каждый элемент в локальную переменную для использования присоединенным блоком.
  • В пока оператор, который выполняет блок кода, пока его условие истинно.
  • В пытаться оператор, который позволяет перехватывать и обрабатывать исключения, возникающие в присоединенном блоке кода. Кроме статьи; это также гарантирует, что код очистки в наконец-то блок всегда будет запускаться независимо от того, как блок выходит.
  • В поднимать оператор, используемый для вызова указанного исключения или повторного вызова пойманного исключения.
  • В учебный класс оператор, который выполняет блок кода и присоединяет свое локальное пространство имен к учебный класс, для использования в объектно-ориентированного программирования.
  • В def заявление, которое определяет функция или же метод.
  • В с заявление из Python 2.5, выпущенного в сентябре 2006 г.,[71] который включает блок кода в диспетчере контекста (например, получение замок перед запуском блока кода и снятием блокировки после этого или открытием файл а затем закрывая его), позволяя Приобретение ресурсов - это инициализация (RAII) -подобное поведение и заменяет обычную идиому try / finally.[72]
  • В перемена оператор, выходит из цикла.
  • В Продолжить оператор пропускает эту итерацию и переходит к следующему элементу.
  • В проходить заявление, которое служит NOP. Синтаксически необходимо создать пустой блок кода.
  • В утверждать оператор, используемый во время отладки для проверки условий, которые должны применяться.
  • В урожай оператор, который возвращает значение из генератор функция. Из Python 2.5, урожай тоже оператор. Эта форма используется для реализации сопрограммы.
  • В возвращаться оператор, используемый для возврата значения из функции.
  • В импорт оператор, который используется для импорта модулей, функции или переменные которых могут использоваться в текущей программе. Есть три способа использования импорт: импорт <модуль имя> [в качестве <псевдоним>] или же из <модуль имя> импорт * или же из <модуль имя> импорт <определение 1> [в качестве <псевдоним 1>], <определение 2> [в качестве <псевдоним 2>], ....
  • В Распечатать заявление было изменено на Распечатать() функция в Python 3.

Python не поддерживает хвостовой зов оптимизация или первоклассные продолжения, и, по словам Гвидо ван Россума, этого никогда не произойдет.[73][74] Однако лучшая поддержка сопрограмма -подобная функциональность предоставляется в версии 2.5 путем расширения Python генераторы.[75] До версии 2.5 генераторы были ленивый итераторы; информация передавалась из генератора в одном направлении. Из Python 2.5 можно передавать информацию обратно в функцию генератора, а из Python 3.3 информация может передаваться через несколько уровней стека.[76]

Выражения

Немного Python выражения похожи на такие языки, как C и Ява, а некоторые нет:

  • Сложение, вычитание и умножение одинаковы, но поведение деления отличается. В Python есть два типа деления. Это деление этажа (или целочисленное деление) // и с плавающей точкой/разделение.[77] Python также добавил ** оператор возведения в степень.
  • Начиная с Python 3.5, новый @ был введен инфиксный оператор. Он предназначен для использования такими библиотеками, как NumPy за матричное умножение.[78][79]
  • Начиная с Python 3.8 синтаксис :=, называемый «моржовым оператором». Он присваивает значения переменным как часть более крупного выражения.[80]
  • В Python == сравнивает по значению, в отличие от Java, который сравнивает числа по значению[81] и объекты по ссылке.[82] (Сравнение значений в Java на объектах может выполняться с равно () метод.) Python является Оператор может использоваться для сравнения идентичностей объектов (сравнение по ссылке). В Python сравнения могут быть связаны, например а <= б <= с.
  • Python использует слова и, или же, нет для его логических операторов, а не символических &&, ||, ! используется в Java и C.
  • У Python есть тип выражения, называемый понимание списка. Python 2.4 расширяет понимание списков в более общее выражение, называемое генератор выражение.[59]
  • Анонимные функции реализуются с использованием лямбда-выражения; однако они ограничены тем, что тело может быть только одним выражением.
  • Условные выражения в Python записываются как x если c иначе y[83] (порядок операндов отличается от с? х: у оператор, общий для многих других языков).
  • Python делает различие между списки и кортежи. Списки записываются как [1, 2, 3], являются изменяемыми и не могут использоваться в качестве ключей словарей (ключи словаря должны быть неизменный в Python). Кортежи записываются как (1, 2, 3), являются неизменяемыми и поэтому могут использоваться в качестве ключей словарей при условии, что все элементы кортежа неизменны. В + Оператор может использоваться для объединения двух кортежей, который не изменяет напрямую их содержимое, а скорее создает новый кортеж, содержащий элементы обоих предоставленных кортежей. Таким образом, с учетом переменной т изначально равняется (1, 2, 3), выполняя т = т + (4, 5) сначала оценивает т + (4, 5), что дает (1, 2, 3, 4, 5), который затем присваивается обратно т, тем самым эффективно "изменяя содержимое" т, при этом соблюдая неизменяемую природу объектов кортежей. Скобки необязательны для кортежей в однозначном контексте.[84]
  • Возможности Python последовательность распаковки при этом несколько выражений, каждое из которых оценивает все, что может быть присвоено (переменная, свойство, доступное для записи и т. д.), связаны таким же образом, как и формирующие литералы кортежа, и в целом помещаются в левую часть знака равенства в операторе присваивания. Заявление ожидает повторяемый объект в правой части знака равенства, который производит такое же количество значений, что и предоставленные записываемые выражения при итерации, и будет выполнять итерацию через него, присваивая каждое из полученных значений соответствующему выражению слева.[85]
  • В Python есть оператор "строкового формата" %. Это работает аналогично printf форматировать строки в C, например "спам =% s яйца =% d" % ("бла", 2) оценивает "спам = бла яйца = 2". В Python 3 и 2.6+ это было дополнено формат() метод ул. класс, например "спам ={0} яйца ={1}".формат("бла", 2). Python 3.6 добавил "f-строки": бла = "бла"; яйца = 2; ж'спам ={бла} яйца ={яйца}'.[86]
  • Строки в Python могут быть соединенный, "добавляя" их (тот же оператор, что и для добавления целых чисел и чисел с плавающей запятой). Например. ‹Code› print («спам» + «яйца») дает ‹code› спам-ягца. Даже если ваши строки содержат числа, они все равно добавляются как строки, а не целые числа. ‹Code› печать ("2" + "2") дает ‹code› 22 ‹/code›.
  • Python имеет различные виды строковые литералы:
    • Строки, разделенные одинарными или двойными кавычками. В отличие от Оболочки Unix, Perl и в языках с влиянием Perl одинарные кавычки и двойные кавычки работают одинаково. Оба типа строк используют обратную косую черту (\) как escape-символ. Строчная интерполяция стал доступен в Python 3.6 как «форматированные строковые литералы».[86]
    • Строки в тройных кавычках, которые начинаются и заканчиваются серией из трех одинарных или двойных кавычек. Они могут охватывать несколько строк и функционировать как здесь документы в оболочках, Perl и Рубин.
    • Необработанная строка разновидности, обозначаемые префиксом строкового литерала с р. Escape-последовательности не интерпретируются; следовательно, необработанные строки полезны там, где обычны буквальные обратные косые черты, например обычные выражения и Windows -стиль дорожек. Сравнивать "@-цитирование "в C #.
  • Python имеет индекс массива и нарезка массива выражения в списках, обозначенные как ключ], а [начало: стоп] или же a [начало: стоп: шаг]. Индексы с нуля, а отрицательные индексы относятся к концу. Ломтики берут элементы из Начните индекс до, но не включая, остановка индекс. Третий параметр среза, называемый шаг или же шагать, позволяет пропускать и переворачивать элементы. Индексы срезов могут быть опущены, например a [:] возвращает копию всего списка. Каждый элемент среза - это мелкая копия.

В Python строго соблюдается различие между выражениями и операторами, в отличие от таких языков, как Common Lisp, Схема, или же Рубин. Это приводит к дублированию некоторых функций. Например:

  • Составьте список против. за-петли
  • Условный выражения vs. если блоки
  • В eval () против. exec () встроенные функции (в Python 2, exec это заявление); первая предназначена для выражений, вторая - для операторов.

Утверждения не могут быть частью выражения, поэтому список и другие понимания или лямбда-выражения, поскольку все являются выражениями, не могут содержать операторов. Частным случаем этого является то, что оператор присваивания, такой как а = 1 не может быть частью условного выражения условного оператора. Это дает то преимущество, что позволяет избежать классической ошибки C, связанной с ошибкой оператора присваивания. = для оператора равенства == в условиях: если (c = 1) {...} синтаксически верный (но, вероятно, непреднамеренный) код C, но если c = 1: ... вызывает синтаксическую ошибку в Python.

Методы

Методы на объектах функции прикреплен к классу объекта; синтаксис instance.method (аргумент) для обычных методов и функций синтаксический сахар за Class.method (экземпляр, аргумент). Методы Python имеют явное себя параметр для доступа данные экземпляра, в отличие от неявного себя (или же это) в некоторых других объектно-ориентированных языках программирования (например, C ++, Ява, Цель-C, или же Рубин ).[87]

Печатать

Стандартная иерархия типов в Python 3

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

Python позволяет программистам определять свои собственные типы, используя классы, которые чаще всего используются для объектно-ориентированного программирования. Новый экземпляры классов создаются путем вызова класса (например, SpamClass () или же EggsClass ()), а классы являются экземплярами метакласс тип (сам по себе экземпляр), позволяя метапрограммирование и отражение.

До версии 3.0 в Python было два типа классов: Старый стиль и новый стиль.[88] Синтаксис обоих стилей одинаков, разница в том, объект наследуется от, прямо или косвенно (все классы нового стиля наследуются от объект и являются экземплярами тип). В версиях Python 2 начиная с Python 2.2 могут использоваться оба типа классов. Классы старого стиля были удалены в Python 3.0.

В долгосрочном плане - поддержка постепенный набор текста[89] а из Python 3.5 синтаксис языка позволяет указывать статические типы, но они не проверяются в реализации по умолчанию, CPython. Экспериментальная дополнительная проверка статического типа с именем mypy поддерживает проверку типов во время компиляции.[90]

Сводка встроенных типов Python 3
ТипИзменчивостьОписаниеПримеры синтаксиса
boolнеизменныйЛогическое значениеИстинный
Ложь
bytearrayизменчивыйПоследовательность из байтыbytearray(б'Немного ASCII')
bytearray(б"Немного ASCII")
bytearray([119, 105, 107, 105])
байтынеизменныйПоследовательность байтовб'Немного ASCII'
б"Немного ASCII"
байты([119, 105, 107, 105])
сложныйнеизменныйКомплексное число с реальными и мнимыми частями3+2.7j
диктоватьизменчивыйАссоциативный массив (или словарь) пар ключ-значение; могут содержать смешанные типы (ключи и значения), ключи должны быть хешируемого типа{'key1': 1.0, 3: Ложь}
{}
многоточиеанеизменныйAn многоточие заполнитель для использования в качестве индекса в NumPy массивы...
Многоточие
плаватьнеизменныйДвойная точность плавающая точка номер. Точность зависит от машины, но на практике обычно реализуется как 64-битная IEEE 754 число с точностью 53 бита[91]

1.414

морозильникнеизменныйНеупорядоченный набор, не содержит дубликатов; может содержать смешанные типы, если хешируемыйморозильник([4.0, 'нить', Истинный])
intнеизменныйЦелое число неограниченного масштаба[92]42
списокизменчивыйСписок, может содержать смешанные типы[4.0, 'нить', Истинный]
[]
NoneTypeанеизменныйОбъект, представляющий отсутствие значения, часто называемый ноль на других языкахНикто
NotImplementedTypeанеизменныйЗаполнитель, который можно вернуть из перегруженные операторы для обозначения неподдерживаемых типов операндов.Не реализована
классифицироватьнеизменныйПоследовательность чисел, обычно используемая для выполнения определенного числа циклов в за петли[93]классифицировать(1, 10)
классифицировать(10, -5, -2)
наборизменчивыйНеупорядоченный набор, не содержит дубликатов; может содержать смешанные типы, если хешируемый{4.0, 'нить', Истинный}
набор()
ул.неизменныйА строка символов: последовательность кодовых точек Unicode"Википедия"
«Википедия»
"" "Охватнескольколинии "" "
кортежнеизменныйМожет содержать смешанные типы(4.0, 'нить', Истинный)
('одиночный элемент',)
()

^ а Не доступен напрямую по имени

Арифметические операции

В Python есть обычные символы для арифметических операторов (+, -, *, /), оператор деления этажей // и операция по модулю % (где остаток может быть отрицательным, например 4 % -3 == -2). Он также имеет ** за возведение в степень, например 5**3 == 125 и 9**0.5 == 3.0, и оператор матричного умножения @ .[94] Эти операторы работают как в традиционной математике; с тем же правила приоритета, операторы инфикс ( + и - так же может быть унарный для представления положительных и отрицательных чисел соответственно).

Деление между целыми числами дает результаты с плавающей запятой. Поведение деления со временем значительно изменилось:[95]

  • Python 2.1 и более ранние версии использовали поведение деления C. В / Оператор представляет собой целочисленное деление, если оба операнда являются целыми числами, и деление с плавающей запятой в противном случае. Целочисленное деление округляется до 0, например 7/3 == 2 и -7/3 == -2.
  • Python 2.2 изменил целочисленное деление на округление до отрицательной бесконечности, например. 7/3 == 2 и -7/3 == -3. Разделение этажей // был введен оператор. Так 7//3 == 2, -7//3 == -3, 7.5//3 == 2.0 и -7.5//3 == -3.0. Добавление из __будущее__ импорт разделение заставляет модуль использовать правила Python 3.0 для деления (см. далее).
  • Python 3.0 изменен / всегда быть делением с плавающей запятой, например 5/2 == 2.5.

В терминах Python / является истинное деление (или просто разделение), и // является этажное деление. / до версии 3.0 классическое деление.[95]

Округление в сторону отрицательной бесконечности, хотя и отличается от большинства языков, добавляет последовательности. Например, это означает, что уравнение (а + б)//б == а//б + 1 всегда правда. Это также означает, что уравнение б*(а//б) + а%б == а действительно как для положительных, так и для отрицательных значений а. Однако сохранение справедливости этого уравнения означает, что пока результат а% б находится, как и ожидалось, в полуоткрытый интервал [0, б), куда б - целое положительное число, оно должно лежать в интервале (б, 0] когда б отрицательный.[96]

Python предоставляет круглый функция для округление число с плавающей точкой до ближайшего целого числа. За решающий вопрос, Python 3 использует округлить до четного: круглый (1.5) и круглый (2.5) оба производят 2.[97] Версии до 3 использовались округление с нуля: круглый (0,5) является 1.0, круглый (-0,5) является −1.0.[98]

Python допускает логические выражения с множественными отношениями равенства способом, совместимым с общим использованием в математике. Например, выражение а <Ь <с проверяет, есть ли а меньше чем б и б меньше чем c.[99] Языки, производные от C, интерпретируют это выражение по-разному: в C выражение сначала оценивает а <б, что дает 0 или 1, и этот результат затем сравнивается с c.[100]

Python использует арифметика произвольной точности для всех целочисленных операций. В Десятичный тип / класс в десятичный Модуль предоставляет десятичные числа с плавающей запятой с заранее определенной произвольной точностью и несколькими режимами округления.[101] В Дробная часть класс в фракции модуль обеспечивает произвольную точность для рациональное число.[102]

Благодаря обширной математической библиотеке Python и сторонней библиотеке NumPy который дополнительно расширяет собственные возможности, он часто используется в качестве научного языка сценариев для помощи в таких проблемах, как обработка и манипулирование числовыми данными.[103][104]

Примеры программирования

Привет, мир программа:

Распечатать('Привет, мир!')

Программа для расчета факториал положительного целого числа:

п = int(Вход("Введите число, и будет напечатан его факториал:"))если п < 0:    поднимать ValueError("Вы должны ввести неотрицательное целое число")факт = 1за я в классифицировать(2, п + 1):    факт *= яРаспечатать(факт)

Библиотеки

Большой Python стандартная библиотека, который обычно называют одной из самых сильных сторон,[105] предоставляет инструменты, подходящие для многих задач. Для приложений с выходом в Интернет используется множество стандартных форматов и протоколов, таких как MIME и HTTP поддерживаются. Включает модули для создания графический пользовательский интерфейс, присоединенный к реляционные базы данных, генерация псевдослучайных чисел, арифметика с десятичными знаками произвольной точности,[106] манипулирование обычные выражения, и модульное тестирование.

Некоторые части стандартной библиотеки охвачены спецификациями (например, Интерфейс шлюза веб-сервера (WSGI) реализация wsgiref следует PEP 333[107]), но большинство модулей - нет. Они указаны в их коде, внутренней документации и наборы тестов. Однако, поскольку большая часть стандартной библиотеки представляет собой кросс-платформенный код Python, только несколько модулей нуждаются в изменении или переписывании для различных реализаций.

По состоянию на ноябрь 2019 г. то Индекс пакета Python (PyPI), официальный репозиторий для стороннего программного обеспечения Python, содержит более 200000[108] пакеты с широким набором функций, в том числе:

Среда разработки

Большинство реализаций Python (включая CPython) включают цикл чтения – оценки – печати (REPL), позволяя им функционировать как интерпретатор командной строки для которых пользователь вводит операторы последовательно и немедленно получает результаты.

Прочие снаряды, в том числе ПРАЗДНЫЙ и IPython, добавьте дополнительные возможности, такие как улучшенное автозаполнение, сохранение состояния сеанса и подсветка синтаксиса.

А также стандартный рабочий стол интегрированные среды разработки, Существуют веб-браузер на базе IDE; SageMath (предназначен для разработки программ Python, связанных с наукой и математикой); PythonAnywhere, IDE на основе браузера и среда хостинга; и Canopy IDE, коммерческая среда разработки Python, в которой научные вычисления.[110]

Реализации

Эталонная реализация

CPython это эталонная реализация Python. Это написано в C, встреча с C89 стандарт с несколькими избранными C99 Особенности.[111] Он компилирует программы Python в промежуточный байт-код[112] который затем выполняется его виртуальная машина.[113] CPython распространяется с большой стандартной библиотекой, написанной на смеси C и собственного Python. Он доступен для многих платформ, в том числе Windows (начиная с версии Python 3.9.1, Python "активно запрещает установку на Windows 7 ";[114] и поддержал Windows XP и старше, с неподдерживаемым Python 2.7) и наиболее современные Unix-подобный системы, включая macOS (и Яблоко M1 Mac, начиная с Python 3.9.1, с экспериментальным установщиком) и неофициальной поддержкой, например, VMS.[115] Переносимость платформы была одним из его первых приоритетов,[116] в таймфреймах Python 1 и 2, даже с поддержкой OS / 2 и Солярис;[117] с тех пор поддержка была прекращена для многих платформ.

Другие реализации

PyPy это быстрый, совместимый интерпретатор Python 2.7 и 3.6.[118] Его своевременный компилятор обеспечивает значительное улучшение скорости по сравнению с CPython, но с ним нельзя использовать несколько библиотек, написанных на C.[119][120]

Безстековый Python это важный форк CPython, который реализует микронити; он не использует стек памяти C, что позволяет выполнять массово параллельные программы. PyPy также имеет версию без стека.[121]

MicroPython и CircuitPython оптимизированы ли варианты Python 3 для микроконтроллеры. Это включает в себя Лего Mindstorms EV3.[122]

Неподдерживаемые реализации

Другие JIT-компиляторы Python были разработаны, но в настоящее время не поддерживаются:

В 2005 году, Nokia выпустила интерпретатор Python для Серии 60 мобильные телефоны PyS60. Он включает многие модули из реализаций CPython и некоторые дополнительные модули для интеграции с Symbian Операционная система. Проект постоянно обновляется для работы на всех вариантах платформы S60, и доступно несколько сторонних модулей. Nokia N900 также поддерживает Python с GTK библиотеки виджетов, позволяющие писать и запускать программы на целевом устройстве.[124]

Кросс-компиляторы на другие языки

Есть несколько компиляторов высокого уровня. объектные языки, либо с неограниченным Python, либо с ограниченным подмножеством Python, либо с языком, подобным Python, в качестве исходного языка:

  • Cython компилирует Python в C и C ++.
  • Grumpy от Google (последний выпуск в 2017 году) компилирует Python 2 в Идти.[125][126]
  • IronPython следует аналогичному подходу для запуска программ Python в .NET. общеязыковая среда выполнения.
  • Jython позволяет использовать библиотеку классов Java из программы Python.
  • MyHDL компилирует Python в VHDL.
  • Нуитка компилирует Python в C ++.[127]
  • Нумба использует LLVM для компиляции Python в машинный код.
  • Pyjs (последний выпуск в 2012 году) компилирует Python в JavaScript.
  • Pyrex (последний выпуск в 2010 г.) и Слитая кожа (последний выпуск в 2013 году) компилируется на C и C ++ соответственно.
  • Pythran компилирует Python в C ++.[128][129]
  • RPython может быть скомпилирован в C, и используется для создания интерпретатора Python PyPy.

Спектакль

Сравнение производительности различных реализаций Python на нечисловой (комбинаторной) рабочей нагрузке было представлено на EuroSciPy '13.[130] Производительность Python по сравнению с другими языками программирования также была протестирована Игра "Тесты компьютерного языка".[131]

Разработка

Разработка Python осуществляется в основном через Предложение по усовершенствованию Python (PEP), основной механизм для предложения основных новых функций, сбора комментариев сообщества по вопросам и документирования проектных решений Python.[132] Стиль кодирования Python рассматривается в PEP 8.[133] Выдающиеся PEP рассматриваются и комментируются сообществом Python и руководящим советом.[132]

Улучшение языка соответствует развитию эталонной реализации CPython. Список рассылки python-dev является основным форумом для разработки языка. Конкретные вопросы обсуждаются в Округлять баг трекер размещен в bugs.python.org.[134] Первоначально разработка проходила на самостоятельный репозиторий исходного кода запущен Mercurial, пока Python не перешел на GitHub в январе 2017 года.[135]

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

  • Версии, несовместимые с предыдущими версиями, где ожидается, что код сломается, и его придется вручную портирован. Увеличивается первая часть номера версии. Эти выпуски случаются нечасто - например, версия 3.0 была выпущена через 8 лет после 2.0.
  • Основные или «функциональные» выпуски примерно каждые 18 месяцев в основном совместимы, но содержат новые функции. Вторая часть номера версии увеличивается. Каждая мажорная версия поддерживается исправлениями в течение нескольких лет после выпуска.[136]
  • Выпуски исправлений,[137] которые не вводят новых функций, происходят примерно каждые 3 месяца и делаются, когда достаточное количество ошибок было исправлено в апстриме с момента последнего выпуска. В этих выпусках также исправлены уязвимости системы безопасности. Третья и последняя часть номера версии увеличивается.[137]

Python 3.9 alpha1 был анонсирован в ноябре 2019 года[138] и с принятием новой ежегодной периодичности выпуска,[139][140] первый выпуск 3.9 намечен на ноябрь 2020 года.[141]

Много альфа, бета и релиз-кандидаты также выпускаются как предварительные версии и для тестирования перед финальными версиями. Хотя для каждого выпуска существует приблизительный график, они часто откладываются, если код не готов. Команда разработчиков Python следит за состоянием кода, запуская большой модульный тест Suite во время разработки и с помощью BuildBot непрерывная интеграция система.[142]

Главная научная конференция на Python есть PyCon. Существуют также специальные программы наставничества Python, такие как Пиладии.

Генераторы документации API

Генераторы документации Python API включают:

Именование

Имя Python происходит от британской комедийной группы. Монти Пайтон, которым пользовался создатель Python Гвидо ван Россум при разработке языка. Ссылки Monty Python часто встречаются в коде и культуре Python;[143] например, метасинтаксические переменные в литературе по Python часто используются спам и яйца вместо традиционного фу и бар.[143][144] Официальная документация Python также содержит различные ссылки на процедуры Monty Python.[145][146]

Префикс Py- используется, чтобы показать, что что-то связано с Python. Примеры использования этого префикса в именах приложений или библиотек Python включают Pygame, а привязка из SDL на Python (обычно используется для создания игр); PyQt и PyGTK, которые связывают Qt и GTK на Python соответственно; и PyPy, реализация Python, изначально написанная на Python.

Использует

С 2003 года Python неизменно входит в десятку самых популярных языков программирования в мире. Индекс сообщества программистов TIOBE где по состоянию на февраль 2020 г., это третий по популярности язык (после Ява, и C ).[147] Он был выбран языком программирования года в 2007, 2010 и 2018 годах.[148]

Эмпирическое исследование показало, что языки сценариев, такие как Python, более продуктивны, чем обычные языки, такие как C и Java, для задач программирования, связанных с манипуляциями со строками и поиском в словаре, и определило, что потребление памяти часто было «лучше, чем у Java, а не намного хуже, чем C или C ++ ».[149]

Крупные организации, использующие Python, включают Википедия, Google,[150] Yahoo!,[151] ЦЕРН,[152] НАСА,[153] Facebook,[154] Amazon, Instagram,[155] Spotify[156] и некоторые более мелкие объекты, такие как ILM[157] и ITA.[158] Социальная сеть новостей Reddit полностью написан на Python.[159]

Python может служить язык сценариев за веб-приложения, например, через mod_wsgi для Веб-сервер Apache.[160] С Интерфейс шлюза веб-сервера, стандартный API был разработан для облегчения работы этих приложений. Веб-фреймворки подобно Джанго, Пилоны, Пирамида, TurboGears, web2py, Торнадо, Колба, Бутылка и Zope поддерживать разработчиков в разработке и обслуживании сложных приложений. Pyjs и IronPython может использоваться для разработки клиентских приложений на основе Ajax. SQLAlchemy может использоваться как картограф данных в реляционную базу данных. Скрученный представляет собой структуру для программирования связи между компьютерами и используется (например) Dropbox.

Библиотеки, такие как NumPy, SciPy и Матплотлиб позволяют эффективно использовать Python в научные вычисления,[161][162] со специализированными библиотеками, такими как Биопайтон и Астропия предоставление специфичных для домена функций. SageMath это математическое программное обеспечение с интерфейс ноутбука программируется на Python: его библиотека охватывает многие аспекты математика, включая алгебра, комбинаторика, вычислительная математика, теория чисел, и исчисление.[163] OpenCV имеет привязки Python с богатым набором функций для компьютерное зрение и обработка изображений.[164]

Python был успешно встроен во многие программные продукты в качестве языка сценариев, в том числе в метод конечных элементов программное обеспечение, такое как Abaqus, 3D параметрическое моделирование, например FreeCAD, Пакеты 3D-анимации, такие как 3ds Max, Блендер, Cinema 4D, Световая волна, Гудини, майя, модо, MotionBuilder, Softimage, композитор визуальных эффектов Ядерная бомба, Программы обработки 2D-изображений, например GIMP,[165] Inkscape, Scribus и Покрасочная мастерская Pro,[166] и нотная запись такие программы, как автор партитуры и капелла. Отладчик GNU использует Python как симпатичный принтер для отображения сложных структур, таких как контейнеры C ++. Esri продвигает Python как лучший выбор для написания скриптов на ArcGIS.[167] Он также использовался в нескольких видеоиграх,[168][169] и был принят как первый из трех доступных языки программирования в Google App Engine, два других Ява и Идти.[170]

Python обычно используется в искусственный интеллект проекты и проекты машинного обучения с помощью таких библиотек, как TensorFlow, Керас, Pytorch и Scikit-Learn.[171][172][173][174] Как язык сценариев с модульная архитектура, простой синтаксис и инструменты обработки форматированного текста, Python часто используется для обработка естественного языка.[175]

Многие операционные системы включают Python в качестве стандартного компонента. Поставляется с большинством Дистрибутивы Linux,[176] AmigaOS 4 (с использованием Python 2.7), FreeBSD (как пакет), NetBSD, OpenBSD (как пакет) и macOS и может использоваться из командной строки (терминала). Многие дистрибутивы Linux используют установщики, написанные на Python: Ubuntu использует Повсеместность установщик, а Red Hat Linux и Fedora использовать Анаконда установщик. Gentoo Linux использует Python в своих система управления пакетами, Portage.

Python широко используется в информационная безопасность промышленность, в том числе в разработке эксплоитов.[177][178]

Большинство из Сахар программное обеспечение для Один ноутбук на ребенка XO, сейчас разрабатывается в Сахарные лаборатории, написан на Python.[179] В Raspberry Pi одноплатный компьютер Проект принял Python в качестве основного языка пользовательского программирования.

LibreOffice включает Python и намеревается заменить Java на Python. Его поставщик сценариев Python является основной функцией[180] с версии 4.0 от 7 февраля 2013 г.

Языки, на которые повлиял Python

Дизайн и философия Python повлияли на многие другие языки программирования:

  • Бу использует отступ, аналогичный синтаксис и аналогичную объектную модель.[181]
  • Кобра использует отступы и аналогичный синтаксис, а его Благодарности В документе Python первым среди языков, оказавших на него влияние, указан Python.[182]
  • CoffeeScript, а язык программирования который кросс-компилируется в JavaScript, имеет синтаксис, вдохновленный Python.
  • ECMAScript /JavaScript одолженный итераторы и генераторы из Python.[183]
  • GDScript, a scripting language very similar to Python, built-in to the Годо игровой движок.[184]
  • Идти is designed for the "speed of working in a dynamic language like Python"[185] and shares the same syntax for slicing arrays.
  • Groovy was motivated by the desire to bring the Python design philosophy to Ява.[186]
  • Юля was designed to be "as usable for general programming as Python".[24]
  • Ним uses indentation and similar syntax.[187]
  • Рубин 's creator, Юкихиро Мацумото, has said: "I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python. That's why I decided to design my own language."[188]
  • Быстрый, a programming language developed by Apple, has some Python-inspired syntax.[189]

Python's development practices have also been emulated by other languages. For example, the practice of requiring a document describing the rationale for, and issues surrounding, a change to the language (in Python, a PEP) is also used in Tcl,[190] Erlang,[191] и Свифт.[192]

Смотрите также

Рекомендации

  1. ^ а б Guttag, John V. (12 August 2016). Introduction to Computation and Programming Using Python: With Application to Understanding Data. MIT Press. ISBN  978-0-262-52962-4.
  2. ^ "Python Release Python 3.9.1". Python.org. 7 декабря 2020 г.. Получено 8 декабря 2020.
  3. ^ "Python Release Python 3.10.0a3". Python.org. 7 декабря 2020 г.. Получено 8 декабря 2020.
  4. ^ "PEP 483 -- The Theory of Type Hints". Python.org.
  5. ^ File extension .pyo was removed in Python 3.5. Видеть PEP 0488
  6. ^ Holth, Moore (30 March 2014). "PEP 0441 -- Improving Python ZIP Application Support". Получено 12 ноября 2015.
  7. ^ "Starlark Language". Получено 25 мая 2019.
  8. ^ а б "Why was Python created in the first place?". Общие вопросы о Python. Фонд программного обеспечения Python. Получено 22 марта 2007.
  9. ^ "Ada 83 Reference Manual (raise statement)".
  10. ^ Kuchling, Andrew M. (22 December 2006). "Interview with Guido van Rossum (July 1998)". amk.ca. Архивировано из оригинал 1 мая 2007 г.. Получено 12 марта 2012.
  11. ^ а б "itertools — Functions creating iterators for efficient looping — Python 3.7.1 documentation". docs.python.org.
  12. ^ van Rossum, Guido (1993). "An Introduction to Python for UNIX/C Programmers". Proceedings of the NLUUG Najaarsconferentie (Dutch UNIX Users Group). CiteSeerX  10.1.1.38.2023. even though the design of C is far from ideal, its influence on Python is considerable.
  13. ^ а б «Классы». The Python Tutorial. Фонд программного обеспечения Python. Получено 20 февраля 2012. It is a mixture of the class mechanisms found in C++ and Modula-3
  14. ^ Lundh, Fredrik. «Звонок по объекту». effbot.org. Получено 21 ноября 2017. замените «CLU» на «Python», «запись» на «экземпляр» и «процедуру» на «функцию или метод», и вы получите довольно точное описание объектной модели Python.
  15. ^ Simionato, Michele. "Порядок разрешения методов Python 2.3". Фонд программного обеспечения Python. The C3 method itself has nothing to do with Python, since it was invented by people working on Dylan and it is described in a paper intended for lispers
  16. ^ Kuchling, A. M. "Functional Programming HOWTO". Python v2.7.2 documentation. Фонд программного обеспечения Python. Получено 9 февраля 2012.
  17. ^ Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 May 2001). "PEP 255 – Simple Generators". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 9 февраля 2012.
  18. ^ Smith, Kevin D.; Jewett, Jim J.; Montanaro, Skip; Baxter, Anthony (2 September 2004). "PEP 318 – Decorators for Functions and Methods". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 24 февраля 2012.
  19. ^ "More Control Flow Tools". Python 3 documentation. Фонд программного обеспечения Python. Получено 24 июля 2015.
  20. ^ "CoffeeScript". coffeescript.org.
  21. ^ "The Genie Programming Language Tutorial". Получено 28 февраля 2020.
  22. ^ "Perl and Python influences in JavaScript". www.2ality.com. 24 февраля 2013 г.. Получено 15 мая 2015.
  23. ^ Rauschmayer, Axel. "Chapter 3: The Nature of JavaScript; Influences". O'Reilly, Speaking JavaScript. Получено 15 мая 2015.
  24. ^ а б "Почему мы создали Юлию". Сайт Юлии. Февраль 2012 г.. Получено 5 июн 2014. We want something as usable for general programming as Python [...]
  25. ^ Ring Team (4 December 2017). «Кольцо и другие языки». ring-lang.net. кольцевой язык.
  26. ^ Бини, Ола (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platform. Беркли: АПресс. п.3. ISBN  978-1-59059-881-8.
  27. ^ Lattner, Chris (3 June 2014). "Домашняя страница Криса Латтнера". Крис Латтнер. Получено 3 июн 2014. Язык Swift является продуктом неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней группы, которая предоставила отзывы, чтобы помочь усовершенствовать и протестировать идеи. Конечно, он также очень выиграл от опыта, с трудом завоеванного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C #, CLU и слишком многих других, чтобы перечислить.
  28. ^ Kuhlman, Dave. "A Python Book: Beginning Python, Advanced Python, and Python Exercises". Раздел 1.1. Архивировано из оригинал (PDF) 23 июня 2012 г.
  29. ^ "About Python". Фонд программного обеспечения Python. Получено 24 апреля 2012., second section "Fans of Python use the phrase "batteries included" to describe the standard library, which covers everything from asynchronous processing to zip files."
  30. ^ Peterson, Benjamin (20 April 2020). "Python Insider: Python 2.7.18, the last release of Python 2". Python Insider. Получено 27 апреля 2020.
  31. ^ "Python Developer's Guide — Python Developer's Guide". devguide.python.org. Получено 17 декабря 2019.
  32. ^ "History and License". Получено 5 декабря 2016. "All Python Releases are Open Source"
  33. ^ https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/
  34. ^ https://www.wired.com/story/python-language-more-popular-than-ever/
  35. ^ а б Venners, Bill (13 January 2003). "The Making of Python". Artima Developer. Artima. Получено 22 марта 2007.
  36. ^ ван Россум, Гвидо (29 августа 2000 г.). "SETL (was: Lukewarm about range literals)". Python-Dev (Список рассылки). Получено 13 марта 2011.
  37. ^ van Rossum, Guido (20 January 2009). "A Brief Timeline of Python". The History of Python. Получено 20 января 2009.
  38. ^ Fairchild, Carlie (12 July 2018). "Guido van Rossum Stepping Down from Role as Python's Benevolent Dictator For Life". Linux журнал. Получено 13 июля 2018.
  39. ^ "Guido van Rossum Stepping Down from Role as Python's Benevolent Dictator For Life | Linux Journal". www.linuxjournal.com.
  40. ^ "Python boss Guido van Rossum steps down after 30 years". Спрашивающий.
  41. ^ "PEP 8100". питон. Фонд программного обеспечения Python. Получено 4 мая 2019.
  42. ^ "PEP 8100". Фонд программного обеспечения Python. Получено 4 мая 2019.
  43. ^ https://discuss.python.org/t/steering-council-nomination-guido-van-rossum-2020-term/2657/11. Отсутствует или пусто | название = (помощь)
  44. ^ Kuchling, A. M.; Zadka, Moshe (16 October 2000). "What's New in Python 2.0". Фонд программного обеспечения Python. Получено 11 февраля 2012.
  45. ^ "Python 3.0 Release". Фонд программного обеспечения Python. Получено 8 июля 2009.
  46. ^ van Rossum, Guido (5 April 2006). "PEP 3000 – Python 3000". Python Enhancement Proposals. Фонд программного обеспечения Python. Архивировано из оригинал 3 марта 2016 г.. Получено 27 июн 2009.
  47. ^ "Automated Python 2 to 3 code translation — Python Documentation". Получено 11 февраля 2018.
  48. ^ "PEP 373 -- Python 2.7 Release Schedule". python.org. Получено 9 января 2017.
  49. ^ "PEP 466 -- Network Security Enhancements for Python 2.7.x". python.org. Получено 9 января 2017.
  50. ^ "Sunsetting Python 2". Python.org. Получено 22 сентября 2019.
  51. ^ "PEP 373 -- Python 2.7 Release Schedule". Python.org. Получено 22 сентября 2019.
  52. ^ "Python Developer's Guide — Python Developer's Guide". devguide.python.org. Получено 17 декабря 2019.
  53. ^ The Cain Gang Ltd. "Метаклассы Python: Кто? Почему? Когда?" (PDF). Архивировано из оригинал (PDF) 30 мая 2009 г.. Получено 27 июн 2009.
  54. ^ "3.3. Special method names". Справочник по языку Python. Фонд программного обеспечения Python. Получено 27 июн 2009.
  55. ^ "PyDBC: method preconditions, method postconditions and class invariants for Python". Получено 24 сентября 2011.
  56. ^ "Contracts for Python". Получено 24 сентября 2011.
  57. ^ "PyDatalog". Получено 22 июля 2012.
  58. ^ "Extending and Embedding the Python Interpreter: Reference Counts". Docs.python.org. Получено 5 июн 2020. Since Python makes heavy use of malloc () и свободный(), it needs a strategy to avoid memory leaks as well as the use of freed memory. The chosen method is called подсчет ссылок.
  59. ^ а б Hettinger, Raymond (30 January 2002). "PEP 289 – Generator Expressions". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 19 февраля 2012.
  60. ^ "6.5 itertools – Functions creating iterators for efficient looping". Docs.python.org. Получено 22 ноября 2016.
  61. ^ а б Peters, Tim (19 August 2004). "PEP 20 – The Zen of Python". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 24 ноября 2008.
  62. ^ Martelli, Alex; Ravenscroft, Anna; Ascher, David (2005). Python Cookbook, 2nd Edition. O'Reilly Media. п. 230. ISBN  978-0-596-00797-3.
  63. ^ "Ebeab.com". ebeab.com.
  64. ^ "General Python FAQ". Python v2.7.3 documentation. Docs.python.org. Получено 4 июн 2020.
  65. ^ "15 Ways Python Is a Powerful Force on the Web".
  66. ^ "8.18. pprint — Data pretty printer — Python 3.8.3 documentation". docs.python.org.
  67. ^ Goodger, David. "Code Like a Pythonista: Idiomatic Python". Архивировано из оригинал 27 мая 2014 г.. Получено 24 марта 2009.
  68. ^ "How to think like a Pythonista".
  69. ^ "Is Python a good language for beginning programmers?". Общие вопросы о Python. Фонд программного обеспечения Python. Получено 21 марта 2007.
  70. ^ "Myths about indentation in Python". Secnetix.de. Получено 19 апреля 2011.
  71. ^ "Python 2.5 Release". Python.org.
  72. ^ "Highlights: Python 2.5". Python.org.
  73. ^ van Rossum, Guido (22 April 2009). "Tail Recursion Elimination". Neopythonic.blogspot.be. Получено 3 декабря 2012.
  74. ^ van Rossum, Guido (9 February 2006). "Language Design Is Not Just Solving Puzzles". Artima forums. Artima. Получено 21 марта 2007.
  75. ^ van Rossum, Guido; Eby, Phillip J. (10 May 2005). "PEP 342 – Coroutines via Enhanced Generators". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 19 февраля 2012.
  76. ^ "PEP 380". Python.org. Получено 3 декабря 2012.
  77. ^ "division". python.org.
  78. ^ "PEP 0465 -- A dedicated infix operator for matrix multiplication". python.org. Получено 1 января 2016.
  79. ^ "Python 3.5.1 Release and Changelog". python.org. Получено 1 января 2016.
  80. ^ "What's New in Python 3.8". Получено 14 октября 2019.
  81. ^ "Chapter 15. Expressions - 15.21.1. Numerical Equality Operators == and !=". Корпорация Oracle. Получено 28 августа 2016.
  82. ^ "Chapter 15. Expressions - 15.21.3. Reference Equality Operators == and !=". Корпорация Oracle. Получено 28 августа 2016.
  83. ^ van Rossum, Guido; Hettinger, Raymond (7 February 2003). "PEP 308 – Conditional Expressions". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 13 июля 2011.
  84. ^ "4. Built-in Types — Python 3.6.3rc1 documentation". python.org. Получено 1 октября 2017.
  85. ^ "5.3. Tuples and Sequences — Python 3.7.1rc2 documentation". python.org. Получено 17 октября 2018.
  86. ^ а б "PEP 498 -- Literal String Interpolation". python.org. Получено 8 марта 2017.
  87. ^ "Why must 'self' be used explicitly in method definitions and calls?". Design and History FAQ. Фонд программного обеспечения Python. Получено 19 февраля 2012.
  88. ^ "The Python Language Reference, section 3.3. New-style and classic classes, for release 2.7.1". Получено 12 января 2011.
  89. ^ "Type hinting for Python". LWN.net. 24 декабря 2014 г.. Получено 5 мая 2015.
  90. ^ «mypy - Дополнительная статическая типизация для Python». Получено 28 января 2017.
  91. ^ "15. Floating Point Arithmetic: Issues and Limitations — Python 3.8.3 documentation". docs.python.org. Получено 6 июн 2020. almost all platforms map Python floats to IEEE-754 double precision
  92. ^ Zadka, Moshe; van Rossum, Guido (11 March 2001). "PEP 237 – Unifying Long Integers and Integers". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 24 сентября 2011.
  93. ^ "Built-in Types". Получено 3 октября 2019.
  94. ^ "PEP 465 -- A dedicated infix operator for matrix multiplication". python.org.
  95. ^ а б Zadka, Moshe; van Rossum, Guido (11 March 2001). "PEP 238 – Changing the Division Operator". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 23 октября 2013.
  96. ^ "Why Python's Integer Division Floors". Получено 25 августа 2010.
  97. ^ "round", The Python standard library, release 3.2, §2: Built-in functions, получено 14 августа 2011
  98. ^ "round", The Python standard library, release 2.7, §2: Built-in functions, получено 14 августа 2011
  99. ^ Beazley, David M. (2009). Python Essential Reference (4-е изд.). п.66.
  100. ^ Керниган, Брайан В .; Ritchie, Dennis M. (1988). Язык программирования C (2-е изд.). п.206.
  101. ^ Batista, Facundo. "PEP 0327 -- Decimal Data Type". Python.org. Получено 26 сентября 2015.
  102. ^ "What's New in Python 2.6 — Python v2.6.9 documentation". docs.python.org. Получено 26 сентября 2015.
  103. ^ "10 Reasons Python Rocks for Research (And a Few Reasons it Doesn't) – Hoyt Koepke". www.stat.washington.edu. Получено 3 февраля 2019.
  104. ^ Shell, Scott (17 June 2014). "An introduction to Python for scientific computing" (PDF). Получено 3 февраля 2019.
  105. ^ Piotrowski, Przemyslaw (July 2006). "Build a Rapid Web Development Environment for Python Server Pages and Oracle". Технологическая сеть Oracle. Oracle. Получено 12 марта 2012.
  106. ^ Batista, Facundo (17 October 2003). "PEP 327 – Decimal Data Type". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 24 ноября 2008.
  107. ^ Eby, Phillip J. (7 December 2003). "PEP 333 – Python Web Server Gateway Interface v1.0". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 19 февраля 2012.
  108. ^ Debill, Erik. "Module Counts". ModuleCounts. Получено 5 ноября 2019.
  109. ^ "20+ Python Web Scraping Examples (Beautiful Soup & Selenium) - Like Geeks". likegeeks.com. 5 декабря 2017 г.. Получено 12 марта 2018.
  110. ^ Enthought, Canopy. "Навес". www.enthought.com. Получено 20 августа 2016.
  111. ^ van Rossum, Guido (5 June 2001). "PEP 7 – Style Guide for C Code". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 24 ноября 2008.
  112. ^ "CPython byte code". Docs.python.org. Получено 16 февраля 2016.
  113. ^ "Python 2.5 internals" (PDF). Получено 19 апреля 2011.
  114. ^ "Download Python". Python.org. Получено 13 декабря 2020.
  115. ^ "history [vmspython]". www.vmspython.org. Получено 4 декабря 2020.
  116. ^ "An Interview with Guido van Rossum". Oreilly.com. Получено 24 ноября 2008.
  117. ^ "Download Python for Other Platforms". Python.org. Получено 4 декабря 2020.
  118. ^ "PyPy compatibility". Pypy.org. Получено 3 декабря 2012.
  119. ^ "speed comparison between CPython and Pypy". Speed.pypy.org. Получено 3 декабря 2012.
  120. ^ Shaw, Anthony (30 March 2018). "Which is the fastest version of Python?". Хакерский полдень. Получено 20 декабря 2019.
  121. ^ "Application-level Stackless features — PyPy 2.0.2 documentation". Doc.pypy.org. Получено 17 июля 2013.
  122. ^ "Python-for-EV3". LEGO Education. Получено 17 апреля 2019.
  123. ^ "Plans for optimizing Python". Google Project Hosting. 15 декабря 2009 г.. Получено 24 сентября 2011.
  124. ^ "Python on the Nokia N900". Stochastic Geometry. 29 апреля 2010 г.
  125. ^ "google/grumpy". 10 April 2020 – via GitHub.
  126. ^ «Проекты». opensource.google.
  127. ^ "Nuitka Home | Nuitka Home". nuitka.net. Получено 18 августа 2017.
  128. ^ Borderies, Olivier (24 January 2019). "Pythran: Python at C++ speed !". Середина.
  129. ^ "Pythran — Pythran 0.9.5 documentation". pythran.readthedocs.io.
  130. ^ Murri, Riccardo (2013). Performance of Python runtimes on a non-numeric scientific code. European Conference on Python in Science (EuroSciPy). arXiv:1404.6388. Bibcode:2014arXiv1404.6388M.
  131. ^ "The Computer Language Benchmarks Game". Получено 30 апреля 2020.
  132. ^ а б Warsaw, Barry; Hylton, Jeremy; Goodger, David (13 June 2000). "PEP 1 – PEP Purpose and Guidelines". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 19 апреля 2011.
  133. ^ "PEP 8 -- Style Guide for Python Code". Python.org.
  134. ^ Cannon, Brett. "Guido, Some Guys, and a Mailing List: How Python is Developed". python.org. Фонд программного обеспечения Python. Архивировано из оригинал 1 июня 2009 г.. Получено 27 июн 2009.
  135. ^ "Python Developer's Guide".
  136. ^ Norwitz, Neal (8 April 2002). "[Python-Dev] Release Schedules (was Stability & change)". Получено 27 июн 2009.
  137. ^ а б Aahz; Baxter, Anthony (15 March 2001). "PEP 6 – Bug Fix Releases". Python Enhancement Proposals. Фонд программного обеспечения Python. Получено 27 июн 2009.
  138. ^ "What's New in Python 3.9". Python. Получено 28 ноября 2019.
  139. ^ "PEP 602 -- Annual Release Cycle for Python". Python.org. Получено 6 ноября 2019.
  140. ^ "Changing the Python release cadence [LWN.net]". lwn.net. Получено 6 ноября 2019.
  141. ^ "PEP 596 -- Python 3.9 Release Schedule". Python.org. Получено 6 ноября 2019.
  142. ^ "Python Buildbot". Python Developer’s Guide. Фонд программного обеспечения Python. Получено 24 сентября 2011.
  143. ^ а б "Whetting Your Appetite". The Python Tutorial. Фонд программного обеспечения Python. Получено 20 февраля 2012.
  144. ^ "In Python, should I use else after a return in an if block?". Переполнение стека. Обмен стеками. 17 февраля 2011 г.. Получено 6 мая 2011.
  145. ^ Lutz, Mark (2009). Изучение Python: мощное объектно-ориентированное программирование. O'Reilly Media, Inc. стр. 17. ISBN  9781449379322.
  146. ^ Fehily, Chris (2002). Python. Peachpit Press. п. XV. ISBN  9780201748840.
  147. ^ "Индекс TIOBE". TIOBE - The Software Quality Company. Получено 7 марта 2017.
  148. ^ TIOBE Software Index (2015). "TIOBE Programming Community Index Python". Получено 10 сентября 2015.
  149. ^ Prechelt, Lutz (14 March 2000). "An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl" (PDF). Получено 30 августа 2013.
  150. ^ "Quotes about Python". Фонд программного обеспечения Python. Получено 8 января 2012.
  151. ^ "Organizations Using Python". Фонд программного обеспечения Python. Получено 15 января 2009.
  152. ^ "Python : the holy grail of programming". CERN Bulletin. CERN Publications (31/2006). 31 июля 2006 г.. Получено 11 февраля 2012.
  153. ^ Shafer, Daniel G. (17 January 2003). "Python Streamlines Space Shuttle Mission Design". Фонд программного обеспечения Python. Получено 24 ноября 2008.
  154. ^ "Tornado: Facebook's Real-Time Web Framework for Python - Facebook for Developers". Facebook для разработчиков. Получено 19 июн 2018.
  155. ^ «Что движет Instagram: сотни экземпляров, десятки технологий». Instagram Engineering. Получено 27 мая 2019.
  156. ^ "How we use Python at Spotify". Spotify Labs. 20 марта 2013 г.. Получено 25 июля 2018.
  157. ^ Fortenberry, Tim (17 January 2003). "Industrial Light & Magic Runs on Python". Фонд программного обеспечения Python. Получено 11 февраля 2012.
  158. ^ Taft, Darryl K. (5 March 2007). «Python скользит в системы». eWeek.com. Ziff Davis Holdings. Получено 24 сентября 2011.
  159. ^ GitHub - reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, 19 March 2019, получено 20 марта 2019
  160. ^ "Usage statistics and market share of Python for websites". 2012. Получено 18 декабря 2012.
  161. ^ Oliphant, Travis (2007). "Python for Scientific Computing". Вычислительная техника в науке и технике. 9 (3): 10–20. Bibcode:2007CSE.....9c..10O. CiteSeerX  10.1.1.474.6460. Дои:10.1109/MCSE.2007.58. S2CID  206457124.
  162. ^ Millman, K. Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Вычислительная техника в науке и технике. 13 (2): 9–12. Bibcode:2011CSE....13b...9M. Дои:10.1109/MCSE.2011.36.
  163. ^ Science education with SageMath, Innovative Computing in Science Education, получено 22 апреля 2019
  164. ^ "OpenCV: OpenCV-Python Tutorials". docs.opencv.org. Получено 14 сентября 2020.
  165. ^ "Installers for GIMP for Windows - Frequently Asked Questions". 26 июля 2013 г. Архивировано с оригинал 17 июля 2013 г.. Получено 26 июля 2013.
  166. ^ "jasc psp9components". Архивировано из оригинал on 19 March 2008.
  167. ^ "About getting started with writing geoprocessing scripts". ArcGIS Desktop Help 9.2. Environmental Systems Research Institute. 17 ноября 2006 г.. Получено 11 февраля 2012.
  168. ^ CCP porkbelly (24 August 2010). "Stackless Python 2.7". EVE Community Dev Blogs. CCP Games. As you may know, EVE has at its core the programming language known as Stackless Python.
  169. ^ Caudill, Barry (20 September 2005). "Modding Sid Meier's Civilization IV". Sid Meier's Civilization IV Developer Blog. Игры Firaxis. Архивировано из оригинал on 2 December 2010. we created three levels of tools ... The next level offers Python and XML support, letting modders with more experience manipulate the game world and everything in it.
  170. ^ "Python Language Guide (v1.0)". Google Documents List Data API v1.0. Архивировано из оригинал on 15 July 2010.
  171. ^ Dean, Jeff; Monga, Rajat; и другие. (9 November 2015). "TensorFlow: Large-scale machine learning on heterogeneous systems" (PDF). TensorFlow.org. Google Research. Получено 10 ноября 2015.
  172. ^ Piatetsky, Gregory. "Python eats away at R: Top Software for Analytics, Data Science, Machine Learning in 2018: Trends and Analysis". KDnuggets. KDnuggets. Получено 30 мая 2018.
  173. ^ "Who is using scikit-learn? — scikit-learn 0.20.1 documentation". scikit-learn.org.
  174. ^ Jouppi, Norm. "Google supercharges machine learning tasks with TPU custom chip". Блог Google Cloud Platform. Получено 19 мая 2016.
  175. ^ "Natural Language Toolkit — NLTK 3.5b1 documentation". www.nltk.org.
  176. ^ "Python Setup and Usage". Фонд программного обеспечения Python. Получено 10 января 2020.
  177. ^ "Immunity: Knowing You're Secure". Архивировано из оригинал 16 февраля 2009 г.
  178. ^ "Core Security". Core Security.
  179. ^ "What is Sugar?". Sugar Labs. Получено 11 февраля 2012.
  180. ^ "4.0 New Features and Fixes". LibreOffice.org. Фонд документа. 2013. Получено 25 февраля 2013.
  181. ^ "Gotchas for Python Users". boo.codehaus.org. Codehaus Foundation. Архивировано из оригинал 11 декабря 2008 г.. Получено 24 ноября 2008.
  182. ^ Esterbrook, Charles. "Благодарности". cobra-language.com. Cobra Language. Получено 7 апреля 2010.
  183. ^ "Proposals: iterators and generators [ES4 Wiki]". wiki.ecmascript.org. Архивировано из оригинал 20 октября 2007 г.. Получено 24 ноября 2008.
  184. ^ "FAQ: What is GDScript and why should I use it?".
  185. ^ Kincaid, Jason (10 November 2009). "Google's Go: A New Programming Language That's Python Meets C++". TechCrunch. Получено 29 января 2010.
  186. ^ Strachan, James (29 August 2003). "Groovy – the birth of a new dynamic language for the Java platform". Архивировано из оригинал 5 апреля 2007 г.. Получено 11 июн 2007.
  187. ^ Yegulalp, Serdar (16 January 2017). "Nim language draws from best of Python, Rust, Go, and Lisp". InfoWorld. Nim's syntax is strongly reminiscent of Python's, as it uses indented code blocks and some of the same syntax (such as the way if/elif/then/else blocks are constructed).
  188. ^ «Интервью с создателем Ruby». Linuxdevcenter.com. Получено 3 декабря 2012.
  189. ^ Латтнер, Крис (3 июня 2014 г.). "Домашняя страница Криса Латтнера". Крис Латтнер. Получено 3 июн 2014. Я начал работу над языком программирования Swift в июле 2010 года. Я реализовал большую часть базовой структуры языка, и лишь несколько человек знали о ее существовании. Несколько других (удивительных) людей начали всерьез вносить свой вклад в конце 2011 года, и в июле 2013 года это стало основным направлением для группы Apple Developer Tools, [...] черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C #, CLU и многие другие, чтобы перечислить.
  190. ^ Куприес, Андреас; Стипендиаты, Донал К. (14 сентября 2000 г.). «СОВЕТ № 3: Формат СОВЕТА». tcl.tk. Разработчик Tcl Xchange. Получено 24 ноября 2008.
  191. ^ Густафссон, Пер; Нисканен, Раймо (29 января 2007 г.). «EEP 1: Цель и рекомендации EEP». erlang.org. Получено 19 апреля 2011.
  192. ^ «Быстрый процесс эволюции». Репозиторий Swift Programming Language Evolution на GitHub. 18 февраля 2020 г.. Получено 27 апреля 2020.

Источники

дальнейшее чтение

внешняя ссылка