Питон (язык программирования)
Из Википедии, свободной энциклопедии
Перейти к навигацииПерейти к поиску
Для других целей,
питон
нажмите здесь ››получить бесплатный курс python ‹‹ нажмите здесь
источник-википедия от гугла
Парадигма Мультипарадигма: функциональная, императивная, объектно-ориентированная, структурированная, рефлексивная Разработано Гвидо ван Россум Разработчик Python Software Foundation Впервые появилось в 1991 году; 30 лет назад[1]Стабильный релиз
3.9.2[2]
/ 19 февраля 2021 г .; 22 дня назад
3.10.0a6[3]
/ 1 марта 2021 г.; 12 дней назад
Дисциплина печати Duck, динамическая, строгая типизация; [4] постепенная (начиная с версии 3.5, но игнорируется в CPython) [5] ОС Linux, macOS , Windows 8 и более поздние версии
и другиеЛицензияЛицензия Python Software FoundationРасширения имен файлов.py, .pyi, .pyc, .pyd, .pyo (до 3.5),[6 ] .pyw, .pyz (начиная с версии 3.5)[7]Веб-сайтwww.python.orgОсновные реализацииCPython, PyPy, Stackless Python, MicroPython, CircuitPython, IronPython, Jython Диалекты Cython, RPython, Starlark [8] Под влиянием ABC, [9] Ada, [10] ALGOL 68, [11] APL, [12] C, [13] C++, [14] CLU, [15] Дилан, [16] Haskell, [17] Icon, [18] Java, [19] Lisp, [20] Modula-3, [14] Perl , Стандартный ML [12] Под влиянием Apache Groovy, Boo, Cobra, CoffeeScript, [21] D, F#, Genie, [22] Go, JavaScript, [23] [24] Юлия, [25] Ним, Кольцо, [26] Рубин, [27] Свифт [28]
- Программирование на Python в Викиучебниках
Python — это интерпретируемый, высокоуровневый и язык программирования общего назначения. Философия дизайна Python делает упор на читабельность кода с заметным использованием значительных отступов. Его языковые конструкции и объектно-ориентированный подход призваны помочь программистам писать четкий, логичный код для небольших и крупных проектов. [29]
Python динамически типизирован и сборщик мусора. Он поддерживает несколько парадигм программирования, включая структурированное (в частности, процедурное), объектно-ориентированное и функциональное программирование. Python часто называют языком на батарейках из-за его обширной стандартной библиотеки. [30]
Гвидо ван Россум начал работать над Python в конце 1980-х, как преемником языка программирования ABC, и впервые выпустил его в 1991 году как Python 0.9.1. [31] Python 2.0 был выпущен в 2000 году и представлен новые функции, такие как понимание списков и система сбора мусора с использованием подсчета ссылок, поддержка которых была прекращена в версии 2.7.18 в 2020 году. [32] Python 3.0 был выпущен в 2008 году и представлял собой основную версию языка, который не является полностью обратно совместимым, и большая часть кода Python 2 не работает без изменений на Python 3.
Python неизменно считается одним из самых популярных языков программирования. [33][34][35][36]
Содержание
- 1История
- 2Философия дизайна и особенности
- 3Синтаксис и семантика
- 3.1Отступ
- 3.2 Операторы и поток управления
- 3.3Выражения
- 3.4Методы
- 3.5Ввод
- 3.6Арифметические операции
- 4Примеры программирования
- 5библиотек
- 6Среды разработки
- 7Реализации
- 7.1Эталонная реализация
- 7.2Другие реализации
- 7.3Неподдерживаемые реализации
- 7.4Кросс-компиляторы для других языков
- 7.5Производительность
- 8Девелопмент
- Генераторы документации 9API
- 10Именование
- 11Uses
- 12 языков под влиянием Python
- 13См. также
- 14Отзывов
- 14.1Источники
- 15Дополнительная литература
- 16Внешние ссылки
История[править]
Гвидо ван Россум на OSCON 2006
Основная статья: История Python
Python был задуман в конце 1980-х [37] Guido van Rossum в Centrum Wiskunde & Informatica (CWI) в Нидерланды как преемник языка программирования ABC, который был вдохновлен SETL , [38], способный обрабатывать исключения и взаимодействовать с операционной системой Amoeba. [9] Его внедрение началось в декабре 1989 года. [39] Ван Россум взял на себя полную ответственность за проект был ведущим разработчиком до 12 июля 2018 года, когда он объявил о своем постоянном отпуске в связи со своими обязанностями в качестве Доброжелательного диктатора Python на всю жизнь. в качестве главного лица, принимающего решения в проекте. [40] Теперь он разделяет свое лидерство в качестве члена руководящего совета из пяти человек. [41][42][43] В январе 2019 г. основные разработчики избрали Бретта Кэннона, Ника Коглана, Барри Варшавы, Кэрол Уиллинг и Ван Россум в Руководящий совет из пяти человек, чтобы возглавить проект. [44] Гвидо ван Россу м с тех пор отозвал свою кандидатуру в Руководящий совет 2020 года. [45]
Python 2.0 был выпущен 16 октября 2000 года со многими важными новыми функциями, включая сборщик мусора с обнаружением циклов и поддержкой Unicode. [46]
Python 3.0 был выпущен 3 декабря 2008 года. Это была основная версия языка, которая не является полностью обратно совместимой. » и серии версий 2.7.x. Релизы Python 3 включают утилиту 2to3
, которая автоматизирует (по крайней мере, частично) перевод кода Python 2 в Python 3. [49]
Дата конца жизни Python 2.7 была первоначально установлена на 2015 год, а затем перенесена на 2020 год из-за опасений, что большой объем существующего кода нельзя будет легко перенести на Python 3. [50][51 ] Для него больше не будет выпускаться исправлений безопасности или других улучшений. [52][53] С концом жизни Python 2 поддерживается только Python 3.6.x [54] и более поздние версии. .
Python 3.9.2 и 3.8.8 были ускорены [55], так как все версии Python (включая 2.7 [56]) имели проблемы с безопасностью, приводившие к возможному удаленному выполнению кода[57]» и веб-кэшированию. отравление». [58]
Философия дизайна и особенности[править]
Python — это мультипарадигмальный язык программирования. Полностью поддерживаются объектно-ориентированное программирование и структурное программирование, а многие его возможности поддерживают функциональное программирование и аспектно-ориентированное программирование (в том числе посредством метапрограммирования [59]» и метаобъектов (магических методов). )).[60] Через расширения поддерживаются многие другие парадигмы, в том числе проектирование по контракту[61][62] и логическое программирование.[63]
Python использует динамическую типизацию и комбинацию подсчета ссылок и сборщика мусора с обнаружением циклов для управления памятью.[64] Он также имеет динамическое разрешение имен (позднее связывание), и имена переменных во время выполнения программы.
Дизайн Python предлагает некоторую поддержку функционального программирования в традициях Lisp. Он имеет функции filter
, map
и reduce
; списковые включения, словари, наборы и генераторные выражения. [65] В стандартной библиотеке есть два модуля (itertools и functools), которые реализуют функциональные инструменты, заимствованные из Haskell и Standard ML. [ 66]
Основная философия языка изложена в документе The Zen of Python (PEP 20), который включает такие афоризмы, как: [67]
- Красивое лучше некрасивого.
- Явное лучше неявного.
- Простое лучше сложного.
- Комплекс лучше сложного.
- Удобочитаемость имеет значение.
Вместо того, чтобы вся его функциональность была встроена в его ядро, Python был спроектирован так, чтобы быть очень расширяемым. Эта компактная модульность сделала его особенно популярным как средство добавления программируемых интерфейсов к существующим приложениям. Видение Ван Россумом небольшого базового языка с большой стандартной библиотекой и легко расширяемым интерпретатором проистекает из его разочарования в ABC, который придерживался противоположного подхода. [37]
Python стремится к более простому, менее загроможденному синтаксису и грамматике, предоставляя разработчикам выбор в их методологии кодирования. В отличие от девиза Perl есть более одного способа сделать это, Python придерживается философии дизайна должен быть один — и желательно только один — очевидный способ сделать это.[67] » Алекс Мартелли, сотрудник в Python Software Foundation и автор книги о Python, пишет, что Описание чего-либо как «умного не считается комплиментом в культуре Python». [68]
Разработчики Python стремятся избежать преждевременной оптимизации и отказываются от исправлений некритических частей эталонной реализации CPython, которые могли бы предложить незначительное увеличение скорости за счет ясности.[69] Когда важна скорость, Python программист может переместить критичные ко времени функции в модули расширения, написанные на таких языках, как C, или использовать PyPy, компилятор точно в срок. Также доступен Cython, который переводит скрипт Python на C и делает прямые вызовы API уровня C в интерпретаторе Python.
Важная цель разработчиков Python — сделать его использование интересным. Это отражено в названии языка — дань уважения британской комедийной группе Монти Пайтон [70] — и в иногда шутливом подходе к учебникам и справочным материалам, таким как примеры, относящиеся к спаму и яйцам (из известного Эскиз Монти Пайтона) вместо стандартного foo and bar.[71][72]
Распространенным неологизмом в сообществе Python является pythonic, который может иметь широкий спектр значений, связанных со стилем программы. Сказать, что код является питоническим, значит сказать, что он хорошо использует идиомы Python, что он естественен или демонстрирует свободное владение языком, что он соответствует минималистской философии Python и акцентирует внимание на удобочитаемости. Напротив, код, который трудно понять или который читается как грубая транскрипция с другого языка программирования, называется непитоновским. [73][74]
Пользователей и поклонников Python, особенно тех, кто считается хорошо осведомленным или опытным, часто называют Pythonistas. [75][76]
Синтаксис и семантика[править]
Основная статья: Синтаксис и семантика Python
Было предложено объединить эту статью с Синтаксис и семантика Python. (Обсудить)Предлагается с января 2021 г.
Python должен быть легко читаемым языком. Его форматирование визуально незагромождено, и в нем часто используются ключевые слова на английском языке там, где в других языках используются знаки препинания. В отличие от многих других языков, он не использует фигурные скобки для разделения блоков, а точки с запятой после операторов разрешены, но используются редко, если вообще используются. В нем меньше синтаксических исключений и особых случаев, чем в C или Pascal. [77]
Отступ[править]
Основная статья: Синтаксис и семантика Python § Отступ
Python использует отступы пробелов, а не фигурные скобки или ключевые слова, чтобы разграничить блоки. Увеличение отступа происходит после определенных утверждений; уменьшение отступа означает конец текущего блока. [78] Таким образом, визуальная структура программы точно отражает семантическую структуру программы. [1] Эту особенность иногда называют правилом вне поля, которое некоторые другие языки разделяют, но в большинстве языков отступ не имеет никакого семантического значения.
Операторы и поток управления[edit]
Утверждения Python включают (среди прочего):
- Оператор присваивания, использующий единственный знак равенства
=
. - Оператор
if
, который условно выполняет блок кода вместе сelse
иelif
(сокращение от else-if). - Оператор
for
, который выполняет итерацию по итерируемому объекту, записывая каждый элемент в локальную переменную для использования прикрепленным блоком. - Оператор
while
, который выполняет блок кода, пока его условие истинно. - Оператор
try
, который позволяет перехватывать и обрабатывать исключения, возникающие в прикрепленном к нему блоке кода, с помощью предложенийexcept
; это также гарантирует, что код очистки в блокеfinally
будет всегда выполняться независимо от того, как блок выходит. - Оператор
raise
, используемый для возбуждения указанного исключения или повторного возбуждения перехваченного исключения. - Оператор
class
, который выполняет блок кода и прикрепляет его локальное пространство имен к классу для использования в объектно-ориентированном программировании. - Оператор
def
, определяющий функцию или метод. - Оператор
with
из версии Python 2.5, выпущенной в сентябре 2006 г., [79], которая заключает в себе блок кода в менеджере контекста (например, получение блокировки перед запуском блока кода и освобождение блокировки после этого или открытие файл, а затем его закрытие), допуская поведение, подобное приобретению ресурсов, является инициализацией (RAII), и заменяет распространенную идиому try/finally. [80] - Оператор
break
выходит из цикла. - Оператор
continue
пропускает эту итерацию и переходит к следующему элементу. - Оператор
del
удаляет переменную, что означает удаление ссылки из имени на значение, и попытка использовать эту переменную вызовет ошибку. Удаленная переменная может быть переназначена. - Оператор
pass
, который служит NOP. Это синтаксически необходимо для создания пустого блока кода. - Оператор
assert
, используемый во время отладки для проверки условий, которые должны применяться. - Оператор
yield
, возвращающий значение из функции-генератора. Начиная с Python 2.5,yield
также является оператором. Эта форма используется для реализации сопрограмм. - Оператор
return
, используемый для возврата значения из функции. - Оператор
import
, который используется для импорта модулей, чьи функции или переменные могут использоваться в текущей программе. Есть три способа использованияimport
:import <module name> [as <alias>]
илиfrom <module name> import *
илиfrom <module name> import <definition 1> [as <alias 1>], <definition 2> [as <alias 2>], ...
.
Оператор присваивания (=
) работает путем привязки имени как ссылки к отдельному, динамически выделяемому объекту. Переменные могут быть впоследствии переназначены в любое время на любой объект. В Python имя переменной является общим держателем ссылки и не имеет фиксированного типа данных, связанного с ним. Однако в данный момент переменная будет ссылаться на какой-то объект, который будет иметь тип. Это называется динамической типизацией и отличается от языков программирования со статической типизацией, где каждая переменная может содержать значения только определенного типа.
Python не поддерживает оптимизацию хвостового вызова или первоклассные продолжения, и, по словам Гвидо ван Россума, никогда не будет. [81][82] предоставляется в версии 2.5 путем расширения генераторов Python. [83] До версии 2.5 генераторы были ленивыми итераторами; информация передавалась однонаправленно из генератора. Начиная с Python 2.5 можно передавать информацию обратно в функцию-генератор, а начиная с Python 3.3 информацию можно передавать через несколько уровней стека. [84]
Выражения[править]
Некоторые выражения Python похожи на те, что встречаются в таких языках, как C и Java, а некоторые нет:
- Сложение, вычитание и умножение одинаковы, но поведение деления отличается. В Python есть два типа делений. Это деление пола (или целочисленное деление)
//
и деление с плавающей запятой/
division. [85] Python также использует оператор**
для возведения в степень. - В Python 3.5 появился новый инфиксный оператор
@
. Он предназначен для использования такими библиотеками, как NumPy для умножения матриц.[86][87] - Начиная с Python 3.8, был введен синтаксис
:=
, называемый оператором моржа. Он присваивает значения переменным как часть более крупного выражения. [88] - В Python
==
сравнивает по значению, в отличие от Java, которая сравнивает числовые значения по значению [89] и объекты по ссылке. [90] (Сравнение значений в Java для объектов может быть выполнено с помощью методаequals()
.) Операторis
в Python может использоваться для сравнения идентификаторов объектов (сравнение по ссылке). В Python сравнения могут быть связаны, например,a <= b <= c
. - Python использует слова
and
,or
,not
для своих логических операторов, а не символические&&
,||
,!
, используемые в Java и C. - В Python есть тип выражения, называемый понимание списка, а также более общее выражение, называемое выражением генератора. [65]
- Анонимные функции реализованы с использованием лямбда-выражений; однако они ограничены тем, что тело может быть только одним выражением.
- Условные выражения в Python записываются как
x if c else y
[91] (порядок операндов отличается от оператораc ? x : y
, распространенного во многих других языках). - Python делает различие между списками и кортежами. Списки записываются как
[1, 2, 3]
, изменяемы и не могут использоваться в качестве ключей словарей (словарные ключи должны быть неизменяемыми в Python). Кортежи записываются как(1, 2, 3)
, являются неизменяемыми и поэтому могут использоваться в качестве ключей словарей при условии, что все элементы кортежа неизменны. Оператор+
можно использовать для объединения двух кортежей, что не изменяет напрямую их содержимое, а создает новый кортеж, содержащий элементы обоих предоставленных кортежей. Таким образом, при условии, что переменнаяt
изначально равна(1, 2, 3)
, выполнениеt = t + (4, 5)
сначала оцениваетt + (4, 5)
, что дает(1, 2, 3, 4, 5)
, которое затем присваивается обратноt
, тем самым эффективно модифицируя содержимоеt
, при этом согласовываясь с неизменной природой объектов кортежей. Скобки необязательны для кортежей в однозначном контексте.[92] - В Python реализована последовательная распаковка, при которой несколько выражений, каждое из которых оценивает что-либо, что может быть присвоено (переменная, записываемое свойство и т. д.), связываются таким же образом, как при формировании литералов кортежа, и, как в целом, помещаются слева от знака равенства в операторе присваивания. Оператор ожидает объект iterable справа от знака равенства, который производит то же количество значений, что и предоставленные записываемые выражения, при повторении и будет выполнять итерацию по нему, присваивая каждому из произведенных значений к соответствующему выражению слева. [93]
- В Python есть оператор формата строки
%
. Это работает аналогично строкам форматаprintf
в C, например."spam=%s eggs=%d" % ("blah", 2)
оценивается как"spam=blah eggs=2"
. В Python 3 и 2.6+ это было дополнено методомformat()
классаstr
, например."spam={0} eggs={1}".format("blah", 2)
. В Python 3.6 добавлены f-строки:blah = "blah"; eggs = 2; f'spam={blah} eggs={eggs}'
.[94] - Строки в Python можно сцеплять, складывая их (тот же оператор, что и для сложения целых чисел и чисел с плавающей запятой). Например.
"spam" + "eggs"
возвращает"spameggs"
. Даже если ваши строки содержат числа, они все равно добавляются как строки, а не целые числа. Например."2" + "2"
возвращает"22"
. - Python имеет различные виды строковых литералов:
- Строки, разделенные одинарными или двойными кавычками. В отличие от оболочек Unix, Perl и языков под влиянием Perl, одинарные и двойные кавычки работают одинаково. Оба типа строк используют обратную косую черту (
\
) в качестве экранирующего символа. Интерполяция строк стала доступна в Python 3.6 как форматированные строковые литералы. [94] - Строки в тройных кавычках, которые начинаются и заканчиваются серией из трех одинарных или двойных кавычек. Они могут занимать несколько строк и функционировать как здесь документы в оболочках, Perl и Ruby.
- Разновидности необработанной строки, обозначаемые префиксом строкового литерала с
r
. Escape-последовательности не интерпретируются; следовательно, необработанные строки полезны там, где распространена буквенная обратная косая черта, например, в регулярных выражениях и путях в стиле Windows. Сравните '@
-цитирование' в C#. - В Python есть выражения индекс массива и разбиение массива на списки, обозначаемые как
a[key]
,a[start:stop]
илиa[start:stop:step]
. Индексы отсчитываются от нуля, а отрицательные индексы относятся к концу. Срезы берут элементы из индекса start до индекса stop, но не включают его. Третий параметр среза, называемый шаг или шаг, позволяет пропускать элементы и менять их местами. Индексы срезов можно не указывать, например,a[:]
возвращает копию всего списка. Каждый элемент среза является мелкой копией.
В Python жестко проводится различие между выражениями и операторами, в отличие от таких языков, как Common Lisp, Scheme или Ruby. Это приводит к дублированию некоторых функций. Например:
- Списковые включения против
for
-циклов - Условные выражения против
if
блоков - Встроенные функции
eval()
иexec()
(в Python 2exec
— это выражение); первый для выражений, второй для утверждений.
Операторы не могут быть частью выражения, поэтому списки и другие включения или лямбда-выражения, являющиеся выражениями, не могут содержать операторы. Частным случаем этого является то, что оператор присваивания, такой как a = 1
, не может быть частью условного выражения условного оператора. Это имеет то преимущество, что позволяет избежать классической ошибки C, заключающейся в ошибочном принятии оператора присваивания =
за оператор равенства ==
в условиях: if (c = 1) { ... }
является синтаксически допустимым (но, вероятно, непреднамеренным) кодом C, но if c = 1: ...
вызывает синтаксическую ошибку в Python.
Методы[править]
Методы на объектах — это функции, прикрепленные к классу объекта; синтаксис instance.method(argument)
для обычных методов и функций является синтаксическим сахаром для Class.method(instance, argument)
. Методы Python имеют явный параметр self
для доступа к данным экземпляра, в отличие от неявного self
(или this
) в некоторых других объектно-ориентированных языках программирования (например, C++, Java, Objective-C). , или Рубин). [95]
Ввод[править]
Стандартная иерархия типов в Python 3
Python использует утиную типизацию и имеет типизированные объекты, но нетипизированные имена переменных. Ограничения типов не проверяются во время компиляции; скорее, операции над объектом могут завершиться неудачей, что означает, что данный объект не имеет подходящего типа. Несмотря на то, что Python является динамически типизированным, Python является строго типизированным, запрещая операции, которые не определены четко (например, добавление числа к строке), вместо того, чтобы молча пытаться понять их смысл.
Python позволяет программистам определять свои собственные типы с помощью классов, которые чаще всего используются для объектно-ориентированного программирования. Новые экземпляры классов создаются путем вызова класса (например, SpamClass()
или EggsClass()
), а классы являются экземплярами метакласса type
(сам экземпляр самого себя), что позволяет метапрограммировать и рефлексировать.
До версии 3.0 в Python было два вида классов: старый стиль и новый стиль. [96] Синтаксис обоих стилей одинаков, разница в том, что унаследован ли класс object
прямо или косвенно (все классы нового стиля наследуются от object
и являются экземплярами type
). В версиях Python 2, начиная с Python 2.2 и выше, можно использовать оба вида классов. Классы старого стиля были исключены в Python 3.0.
Долгосрочный план состоит в том, чтобы поддерживать постепенную типизацию [97], а начиная с Python 3.5, синтаксис языка позволяет указывать статические типы, но они не проверяются в реализации по умолчанию, CPython. Экспериментальная необязательная статическая проверка типов с именем mypy поддерживает проверку типов во время компиляции. [98]
Сводка встроенных типов Python 3ТипИзменчивостьОписаниеПримеры синтаксисаbool
immutableБулево значениеTrue
Falsebytearray
mutableПоследовательность байтbytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])bytes
immutableПоследовательность байтовb'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])complex
immutable Комплексное число с действительной и мнимой частями3+2.7j
3 + 2.7jdict
mutable Ассоциативный массив (или словарь) пар ключ-значение; может содержать смешанные типы (ключи и значения), ключи должны быть хешируемого типа{'key1': 1.0, 3: False}
{}ellipsis
a неизменяемыйЗаполнитель многоточие для использования в качестве индекса в массивах NumPy...
Ellipsisfloat
immutableдвойной точности число с плавающей запятой. Точность зависит от машины, но на практике обычно реализуется как 64-битное число IEEE 754 с точностью 53 бита. [99]
1.414
frozenset
immutableUnordered множество, не содержит дубликатов; может содержать смешанные типы, если hashablefrozenset([4.0, 'string', True])int
immutableЦелое число неограниченной величины[100]42list
mutableСписок, может содержать смешанные типы[4.0, 'string', True]
[]NoneType
a неизменяемыйОбъект, представляющий отсутствие значения, часто называемый null в другие языкиNoneNotImplementedType
aнеизменяемыйЗаполнитель, который может быть возвращен из перегруженных операторов для обозначения неподдерживаемых типов операндов.NotImplementedrange
immutableПоследовательность чисел, обычно используемая для повторения определенного количества циклов в for
циклах[101]range(1, 10)
range(10, -5, -2)set
mutableUnordered set , не содержит дубликатов; может содержать смешанные типы, если hashable{4.0, 'string', True}
set()str
immutableA строка символов: последовательность кодовых точек Unicode'Wikipedia'
"Wikipedia"
"""Spanning multiple lines"""
tuple
immutableМожет содержать смешанные типы(4.0, 'string', True)
('single element',)
()
^a Нет прямого доступа по имени
Арифметические операции[править]
Python имеет обычные символы для арифметических операторов (+
, -
, *
, /
), оператора деления пола //
и операции по модулю %
(где остаток может быть отрицательным, например, 4 % -3 == -2
). Он также имеет **
для возведения в степень, например. 5**3 == 125
и 9**0.5 == 3.0
, а также оператор умножения матриц @
.[102] Эти операторы работают как в традиционной математике; с теми же правилами старшинства операторы инфиксные ( +
и -
также могут быть унарными для представления положительных и отрицательных чисел соответственно).
Деление между целыми числами дает результаты с плавающей запятой. Поведение деления со временем значительно изменилось: [103]
- 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
. Добавлениеfrom __future__ import division
заставляет модуль использовать правила Python 3.0 для деления (см. далее). - Python 3.0 изменил
/
, чтобы он всегда был делением с плавающей запятой, например.5/2 == 2.5
.
В терминах Python /
– это настоящее деление (или просто деление), а //
– это этажное деление. /
до версии 3.0 — это классическая. деление.[103]
Округление в сторону отрицательной бесконечности, хотя и отличается от большинства языков, добавляет согласованности. Например, это означает, что уравнение (a + b)//b == a//b + 1
всегда верно. Это также означает, что уравнение b*(a//b) + a%b == a
справедливо как для положительных, так и для отрицательных значений a
. Однако сохранение справедливости этого уравнения означает, что, хотя результат a%b
, как и ожидалось, находится в полуоткрытом интервале [0, b), где b
— положительное целое число, он имеет лежать в интервале (b, 0], когда b
отрицательное. [104]
Python предоставляет функцию round
для округления числа с плавающей запятой до ближайшего целого числа. Для разрыва связей Python 3 использует округление до четного: round(1.5)
и round(2.5)
обе производят 2
. [105] Версии до 3 использовали округление от нуля: round(0.5)
равно 1.0
, round(-0.5)
равно −1.0
. [106]
Python допускает логические выражения с множественными отношениями равенства таким образом, который соответствует общему использованию в математике. Например, выражение a < b < c
проверяет, меньше ли a
b
, а b
меньше c
. [107] Языки, производные от C, интерпретируют это выражение по-разному: в C выражение сначала вычисляет a < b
, в результате чего получается 0 или 1, и этот результат затем будет сравниваться с c
. [108]
Python использует арифметику произвольной точности для всех целочисленных операций. Тип/класс Decimal
в модуле decimal
обеспечивает десятичные числа с плавающей запятой с предопределенной произвольной точностью и несколькими режимами округления. [109] Класс Fraction
в модуле fractions
обеспечивает произвольную точность для рациональных чисел. [110]
Благодаря обширной математической библиотеке Python и сторонней библиотеке NumPy, которая еще больше расширяет собственные возможности, он часто используется в качестве научного языка сценариев для решения таких задач, как обработка числовых данных и манипулирование ими. [111] [112]
Примеры программирования[править]
Программа Привет мир:
print('Hello, world!')
Программа для вычисления факториала натурального числа:
n = int(input('Type a number, and its factorial will be printed: ')) if n < 0: raise ValueError('You must enter a non negative integer') fact = 1 for i in range(2, n + 1): fact *= i print(fact)
Библиотеки[править]
Большая стандартная библиотека Python, которую часто называют одной из самых сильных сторон, [113] предоставляет инструменты, подходящие для многих задач. Для приложений с выходом в Интернет поддерживаются многие стандартные форматы и протоколы, такие как MIME и HTTP. Он включает в себя модули для создания графических пользовательских интерфейсов, подключения к реляционным базам данных, генерации псевдослучайных чисел, арифметики с десятичными дробями произвольной точности, [114], работы с регулярными выражениями и модульного тестирования.
Некоторые части стандартной библиотеки охвачены спецификациями (например, реализация Интерфейса шлюза веб-сервера (WSGI) wsgiref
соответствует PEP 333 [115]), но большинство модулей — нет. Они определяются своим кодом, внутренней документацией и наборами тестов. Однако, поскольку большая часть стандартной библиотеки представляет собой кроссплатформенный код Python, только несколько модулей нуждаются в изменении или переписывании для различных реализаций.
По состоянию на март 2021 года Python Package Index (PyPI), официальный репозиторий стороннего программного обеспечения Python, содержит более 290 000 [116] пакетов с широким набором функций, в том числе:
- Автоматизация
- Аналитика данных
- Базы данных
- "Документация"
- Графические пользовательские интерфейсы
- "Обработка изображения"
- "Машинное обучение"
- "Мобильное приложение"
- Мультимедиа
- "Компьютерная сеть"
- Научные вычисления
- Системное администрирование
- Тестовые рамки
- Обработка текста
- Веб-фреймворки
- Веб-скрапинг
Среды разработки[править]
См. также: Сравнение интегрированных сред разработки § Python
Большинство реализаций Python (включая CPython) включают цикл чтения-оценки-печати (REPL), что позволяет им функционировать как интерпретатор командной строки, для которого пользователь последовательно вводит операторы и немедленно получает результаты.
Другие оболочки, в том числе IDLE и IPython, добавляют дополнительные возможности, такие как улучшенное автозаполнение, сохранение состояния сеанса и подсветка синтаксиса.
Помимо стандартных настольных интегрированных сред разработки, существуют IDE на базе веб-браузера; SageMath (предназначен для разработки научных и связанных с математикой программ Python); PythonAnywhere, браузерная IDE и среда хостинга; и Canopy IDE, коммерческая среда разработки Python с упором на научные вычисления. [117]
Реализации[править]
См. Также: Список программного обеспечения Python § Реализации Python
Эталонная реализация[править]
CPython — это эталонная реализация Python. Он написан на C, соответствует стандарту C89 с некоторыми избранными функциями C99 (с выходом более поздних версий C он считается устаревшим; [118] [119] CPython включает свои собственные расширения C, но сторонние расширения не ограничиваются более старыми версиями C, например, могут быть реализованы с помощью C11 или C++[120]).[121] Он компилирует программы Python в промежуточный байт-код[122] , который затем выполняется его виртуальной машиной. [123] CPython распространяется с большой стандартной библиотекой, написанной на смеси C и родного Python. Он доступен для многих платформ, включая Windows (начиная с Python 3.9, установщик Python намеренно не устанавливается на Windows 7 и 8; [124][125] Windows XP поддерживалась до Python 3.5) и большинство современных Unix-подобных систем, включая macOS (и Mac Apple M1, начиная с Python 3.9.1, с экспериментальным установщиком) и неофициальную поддержку, например VMS. [126] Переносимость платформы была одним из первых приоритетов, [127] во времена Python 1 и 2 поддерживались даже OS/2 и Solaris; [128] с тех пор поддержка была прекращена для многих платформ.
Другие реализации[править]
- PyPy — это быстрый, совместимый интерпретатор Python 2.7 и 3.6. [129] Его компилятор точно в срок обеспечивает значительное улучшение скорости по сравнению с CPython, но с ним нельзя использовать несколько библиотек, написанных на C. [ 130][131]
- Stackless Python — значимый форк CPython, реализующий микропотоки; он не использует стек вызовов таким же образом, что позволяет выполнять массово параллельные программы. У PyPy также есть версия без стека. [132]
- MicroPython и CircuitPython — это варианты Python 3, оптимизированные для микроконтроллеров, включая Lego Mindstorms EV3. [133]
- Pyston — это вариант среды выполнения Python, в которой используется своевременная компиляция для ускорения выполнения программ Python. [134]
Неподдерживаемые реализации[править]
Были разработаны и другие интерактивные компиляторы Python, но в настоящее время они не поддерживаются:
- Google начал проект под названием Unladen Swallow в 2009 году с целью пятикратного ускорения интерпретатора Python с помощью LLVM и улучшения его многопоточной способности масштабироваться до тысяч ядер, [135] в то время как обычные реализации страдают от глобальной блокировки интерпретатора.
- Psyco — это снятый с производства компилятор точно в срок, специализирующийся (который не поддерживал Python 2.7 или более позднюю версию), который интегрируется с CPython и преобразует байт-код в машинный код во время выполнения. Выпущенный код специализирован для определенных типов данных и работает быстрее, чем стандартный код Python.
- PyS60 — интерпретатор Python 2 для мобильных телефонов Series 60, выпущенный Nokia в 2005 году. В нем реализованы многие модули из стандартной библиотеки и некоторые дополнительные модули для интеграции с операционной системой Symbian. Nokia N900 также поддерживает Python с библиотеками виджетов GTK, что позволяет писать программы и запускать их на целевом устройстве. [136]
Кросс-компиляторы на другие языки[править]
Существует несколько компиляторов для высокоуровневых объектных языков с неограниченным Python, ограниченным подмножеством Python или языком, похожим на Python, в качестве исходного языка:
- Cython компилирует (надмножество) Python 2.7 в C (при этом полученный код также можно использовать с Python 3 и, например, C++).
- Nuitka компилирует Python в C++. [137]
- Pythran компилирует подмножество Python 3 в C++.[138][139][140]
- Pyrex (последний выпуск 2010 г.) и Shed Skin (последний выпуск 2013 г.) компилируются в C и C++ соответственно.
- Grumpy от Google (последний выпуск 2017 г.) транспилирует Python 2 в Go.[141][142][143]
- IronPython (в настоящее время заброшенный Microsoft) позволяет запускать программы Python 2.7 в Common Language Runtime .NET.
- Jython компилирует Python 2.7 в байт-код Java, позволяя использовать библиотеки Java из программы Python.
- MyHDL — это язык описания оборудования (HDL) на основе Python, который преобразует код MyHDL в код Verilog или VHDL.
- Numba использует LLVM для компиляции подмножества Python в машинный код.
- Brython, [144], Transcrypt [145] [146] и Pyjs (последний выпуск в 2012 г.) компилируют Python в JavaScript.
- RPython может быть скомпилирован в C и используется для сборки интерпретатора Python PyPy.
Производительность[править]
Сравнение производительности различных реализаций Python при нечисловой (комбинаторной) рабочей нагрузке было представлено на EuroSciPy '13. [147] Производительность Python по сравнению с другими языками программирования также оценивается с помощью The Computer Language Benchmarks Game[148]. ]»
Развитие[править]
Разработка Python осуществляется в основном через процесс Python Enhancement Proposal (PEP), основной механизм для предложения основных новых функций, сбора мнений сообщества по проблемам и документирования проектных решений Python. [149] Стиль программирования Python. рассматривается в PEP 8. [150] Выдающиеся PEP рассматриваются и комментируются сообществом Python и руководящим советом. [149]
Усовершенствование языка соответствует разработке эталонной реализации CPython. Список рассылки python-dev является основным форумом для разработки языка. Конкретные вопросы обсуждаются в системе отслеживания ошибок Roundup, размещенной на bugs.python.org. [151] переехал на GitHub в январе 2017 года. [152]
Публичные выпуски CPython бывают трех типов, отличающихся тем, какая часть номера версии увеличивается:
- Версии, несовместимые с предыдущими версиями, в которых ожидается поломка кода и его необходимо портировать вручную. Увеличивается первая часть номера версии. Эти релизы случаются нечасто — версия 3.0 вышла через 8 лет после 2.0.
- Основные или функциональные выпуски происходили примерно каждые 18 месяцев, но с принятием ежегодного графика выпуска, начиная с Python 3.9, ожидается, что они будут выпускаться раз в год. [153][154] Особенности. Увеличивается вторая часть номера версии. Каждая основная версия поддерживается исправлениями ошибок в течение нескольких лет после ее выпуска. [155]
- Выпуски исправлений [156], которые не вводят новых функций, происходят примерно каждые 3 месяца и производятся, когда с момента последнего выпуска было исправлено достаточное количество ошибок. В этих выпусках также исправлены уязвимости безопасности. Увеличивается третья и последняя часть номера версии. [156]
Многие альфа-, бета-версии и версии-кандидаты также выпускаются в качестве предварительных версий и для тестирования перед окончательными выпусками. Хотя для каждого релиза есть примерное расписание, они часто задерживаются, если код не готов. Команда разработчиков Python отслеживает состояние кода, запуская большой набор модульных тестов во время разработки. [157]
Крупнейшая научная конференция по Python — это PyCon. Существуют также специальные программы наставничества по Python, такие как Pyladies.
Pythons 3.10 не поддерживает wstr (который будет удален в Python 3.12; это означает, что расширения Python [158] должны быть изменены к тому времени), [159], а также планируется добавить сопоставление с образцом в язык. [160]
Генераторы документации API[править]
Генераторы документации Python API включают pydoc и Sphinx.
Именование[править]
Название Python происходит от британской комедийной группы Монти Пайтон, которую создатель Python Гвидо ван Россум любил при разработке языка. Ссылки на Monty Python часто встречаются в коде и культуре Python; например, [161], метасинтаксические переменные, часто используемые в литературе по Python, — это спам и яйца. традиционных foo и bar. [161][162] Официальная документация Python также содержит различные ссылки на подпрограммы Monty Python. [163] [164]
Префикс Py- используется, чтобы показать, что что-то связано с Python. Примеры использования этого префикса в именах приложений или библиотек Python включают Pygame, привязку SDL к Python (обычно используется для создания игр); PyQt и PyGTK, которые связывают Qt и GTK с Python соответственно; и PyPy, реализация Python, изначально написанная на Python.
Использует[править]
Основная статья: Список программного обеспечения Python
С 2003 года Python неизменно входит в десятку самых популярных языков программирования в TIOBE Programming Community Index, где по состоянию на февраль 2021 года он является третьим по популярности языком (после Java и C). [165] Он был выбран Языком программирования года (самый высокий рост рейтинга за год) в 2007, 2010, 2018 и 2020 годах (единственный язык, получивший это четыре раза [166]). [167]
Эмпирическое исследование показало, что языки сценариев, такие как Python, более продуктивны, чем обычные языки, такие как C и Java, для решения задач программирования, связанных с манипуляциями со строками и поиском в словаре, и определило, что потребление памяти часто было лучше, чем у Java, а не у намного хуже, чем C или C++. [168]
Крупные организации, использующие Python, включают Wikipedia, Google, [169] Yahoo!, [170] CERN, [171] NASA, [172] Facebook. , [173] Amazon, Instagram, [174] Spotify [175] и некоторые более мелкие организации, такие как ILM [176] и ITA. [177] Социальная новостная сеть Reddit была написана в основном на Python. [178]
Python может служить языком сценариев для веб-приложений, например, через mod_wsgi для веб-сервера Apache. Приложения. Веб-фреймворки, такие как Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle и Zope, помогают разработчикам в разработке и обслуживании сложных приложений. . Pyjs и IronPython можно использовать для разработки клиентской части Ajax-приложений. SQLAlchemy можно использовать в качестве преобразователя данных в реляционную базу данных. Twisted — это фреймворк для программирования связи между компьютерами, который используется (например) Dropbox.
Такие библиотеки, как NumPy, SciPy и Matplotlib, позволяют эффективно использовать Python в научных вычислениях, [180] [181] со специализированными библиотеками, такими как Biopython и Astropy, предоставляющими домен -специфический функционал. SageMath — это математическое программное обеспечение с интерфейсом ноутбука, программируемое на Python: его библиотека охватывает многие аспекты математики, включая алгебру, комбинаторику, численную математику, теорию чисел и теорию чисел. исчисление». [182] OpenCV имеет привязки Python с богатым набором функций для компьютерного зрения и обработки изображений. [183]
Python широко используется в проектах искусственного интеллекта и проектах машинного обучения с помощью таких библиотек, как TensorFlow, Keras, Pytorch и Scikit-learn. [184][185][ 186][187] Как язык сценариев с модульной архитектурой, простым синтаксисом и средствами обработки расширенного текста, Python часто используется для обработки естественного языка.[188]
Python был успешно встроен во многие программные продукты в качестве языка сценариев, в том числе в программное обеспечение для метода конечных элементов, такое как Abaqus, средство параметрического 3D-моделирования, такое как FreeCAD, пакеты 3D-анимации, такие как 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, Softimage, композитор визуальных эффектов Nuke, программы для создания 2D-изображений, такие как GIMP, [189] Inkscape, Scribus и Paint Shop Pro, [190] и нотные программы, такие как Scorewriter и capella. Отладчик GNU использует Python как красивый принтер для отображения сложных структур, таких как контейнеры C++. Esri продвигает Python как лучший выбор для написания скриптов в ArcGIS. [191] Он также использовался в нескольких видеоиграх, [192] [193] и был принят как первый из три доступных языка программирования в Google App Engine, два других — Java и Go. [194]
Многие операционные системы включают Python в качестве стандартного компонента. Он поставляется с большинством дистрибутивов Linux, [195], AmigaOS 4 (с использованием Python 2.7), FreeBSD (как пакет), NetBSD, OpenBSD (как пакет) и macOS и можно использовать из командной строки (терминала). Многие дистрибутивы Linux используют установщики, написанные на Python: Ubuntu использует установщик Ubiquity, а Red Hat Linux и Fedora используют установщик Anaconda. Gentoo Linux использует Python в своей системе управления пакетами Portage.
Python широко используется в индустрии информационной безопасности, в том числе при разработке эксплойтов. [196][197]
Большая часть программного обеспечения Sugar для One Laptop Per Child XO, разрабатываемого в настоящее время в Sugar Labs, написана на Python.[198] Проект одноплатный компьютер Raspberry Pi принял Python в качестве основного пользовательского языка программирования.
LibreOffice включает Python и намерен заменить Java на Python. Его поставщик сценариев Python является основной функцией [199] начиная с версии 4.0 от 7 февраля 2013 года.
Языки, на которые повлиял Python[править]
Дизайн и философия Python повлияли на многие другие языки программирования:
- Boo использует отступы, аналогичный синтаксис и аналогичную объектную модель. [200]
- Cobra использует отступы и аналогичный синтаксис, а в документе Благодарности Python указан на первом месте среди языков, повлиявших на него. [201]
- CoffeeScript, язык программирования, который кросс-компилируется в JavaScript, имеет синтаксис, вдохновленный Python.
- ECMAScript/JavaScript позаимствовал итераторы и генераторы у Python. [202]
- GDScript, скриптовый язык, очень похожий на Python, встроенный в игровой движок Godot. [203]
- Go предназначен для скорости работы на таком динамическом языке, как Python[204]» и использует тот же синтаксис для нарезки массивов.
- Groovy был мотивирован желанием перенести философию дизайна Python на Java. [205]
- Джулия была разработана, чтобы быть столь же пригодной для общего программирования, как и Python. [25]
- Ним использует отступы и аналогичный синтаксис. [206]
- Создатель Ruby, Юкихиро Мацумото, сказал: Я хотел язык сценариев, более мощный, чем Perl, и более объектно-ориентированный, чем Python. Вот почему я решил разработать свой собственный язык. [207]
- Swift, язык программирования, разработанный Apple, имеет синтаксис, вдохновленный Python. [208]
Методы разработки Python также были скопированы другими языками. Например, практика требования документа, описывающего обоснование и проблемы, связанные с изменением языка (в Python, PEP), также используется в Tcl, [209], Erlang, [210 ] и Свифт. [211]