Питон (язык программирования)

Из Википедии, свободной энциклопедии

Перейти к навигацииПерейти к поиску

Для других целей,

питон

нажмите здесь ››получить бесплатный курс 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 делает упор на читабельность кода с заметным использованием значительных отступов. Его языковые конструкции и объектно-ориентированный подход призваны помочь программистам писать четкий, логичный код для небольших и крупных проектов. [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]

Содержание

История[править]

Гвидо ван Россум на 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 2 exec — это выражение); первый для выражений, второй для утверждений.

Операторы не могут быть частью выражения, поэтому списки и другие включения или лямбда-выражения, являющиеся выражениями, не могут содержать операторы. Частным случаем этого является то, что оператор присваивания, такой как 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ТипИзменчивостьОписаниеПримеры синтаксисаboolimmutableБулево значениеTrue
FalsebytearraymutableПоследовательность байтbytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])bytesimmutableПоследовательность байтовb'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])compleximmutable Комплексное число с действительной и мнимой частями3+2.7j
3 + 2.7jdictmutable Ассоциативный массив (или словарь) пар ключ-значение; может содержать смешанные типы (ключи и значения), ключи должны быть хешируемого типа{'key1': 1.0, 3: False}
{}ellipsisa неизменяемыйЗаполнитель многоточие для использования в качестве индекса в массивах NumPy...
Ellipsisfloatimmutableдвойной точности число с плавающей запятой. Точность зависит от машины, но на практике обычно реализуется как 64-битное число IEEE 754 с точностью 53 бита. [99]

1.414

frozensetimmutableUnordered множество, не содержит дубликатов; может содержать смешанные типы, если hashablefrozenset([4.0, 'string', True])intimmutableЦелое число неограниченной величины[100]42listmutableСписок, может содержать смешанные типы[4.0, 'string', True]
[]NoneTypea неизменяемыйОбъект, представляющий отсутствие значения, часто называемый null в другие языкиNoneNotImplementedTypeaнеизменяемыйЗаполнитель, который может быть возвращен из перегруженных операторов для обозначения неподдерживаемых типов операндов.NotImplementedrangeimmutableПоследовательность чисел, обычно используемая для повторения определенного количества циклов в for циклах[101]range(1, 10)
range(10, -5, -2)setmutableUnordered set , не содержит дубликатов; может содержать смешанные типы, если hashable{4.0, 'string', True}
set()strimmutableA строка символов: последовательность кодовых точек Unicode'Wikipedia'
"Wikipedia"

"""Spanning
multiple
lines"""

tupleimmutableМожет содержать смешанные типы(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 повлияли на многие другие языки программирования:

Методы разработки Python также были скопированы другими языками. Например, практика требования документа, описывающего обоснование и проблемы, связанные с изменением языка (в Python, PEP), также используется в Tcl, [209], Erlang, [210 ] и Свифт. [211]