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

Python
Python-логотип-notext.svg
Парадигма Мультипарадигма : объектно-ориентированная , процедурная ( императивная ), функциональная , структурированная , рефлексивная.
Разработано Гвидо ван Россум
Разработчик Фонд программного обеспечения Python
Впервые появился 20 февраля 1991 г . ; 30 лет назад (1991-02-20)
Стабильный выпуск
3.10.0  Отредактируйте это в Викиданных / 4 октября 2021 г . ; 15 дней назад (4 October 2021)
Предварительный выпуск
3.11.0a1  Отредактируйте это в Викиданных / 7 октября 2021 г . ; 12 дней назад (7 October 2021)
Печатная дисциплина Утка , динамичная , строгая типизация ; постепенный (начиная с версии 3.5, но игнорируется в CPython )
Операционные системы Windows , Linux / UNIX , macOS и другие
Лицензия Лицензия Python Software Foundation
Расширения имени файла .py, .pyi, .pyc, .pyd, .pyo (до 3.5), .pyw, .pyz (с 3.5)
Веб-сайт www .python .org
Основные реализации
CPython , PyPy , Stackless Python , MicroPython , CircuitPython , IronPython , Jython
Диалекты
Cython , RPython , Starlark
Под влиянием
ABC , Ada , АЛГОЛ 68 , APL , C , C ++ , CLU , Dylan , Haskell , Icon , Java , Lisp , Modula-3 , Perl , Standard ML
Под влиянием
Apache Groovy , Boo , Cobra , CoffeeScript , D , F # , Genie , Go , JavaScript , Julia , Nim , Ring, Ruby , Swift

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

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

Гвидо ван Россум начал работать над Python в конце 1980-х, как преемником языка программирования ABC , и впервые выпустил его в 1991 году как Python 0.9.0. Python 2.0 был выпущен в 2000 году и представил новые функции, такие как понимание списков и систему сбора мусора с использованием подсчета ссылок . Python 3.0 был выпущен в 2008 году и представлял собой серьезную версию языка, не имеющую полной обратной совместимости . Python 2 был прекращен с версией 2.7.18 в 2020 году.

Python неизменно считается одним из самых популярных языков программирования.

История

Разработчик Python Гвидо ван Россум на OSCON 2006

Python был задуман в конце 1980-х Гвидо ван Россумом из Centrum Wiskunde & Informatica (CWI) в Нидерландах как преемник языка программирования ABC , вдохновленного SETL , способного обрабатывать исключения и взаимодействовать с операционной системой Amoeba . Его реализация началась в декабре 1989 года. Ван Россум взял на себя исключительную ответственность за проект, как ведущий разработчик, до 12 июля 2018 года, когда он объявил о своем «постоянном отпуске» от своих обязанностей в качестве « Доброжелательного диктатора на всю жизнь » Python. сообщество даровало ему, чтобы отразить его долгосрочное обязательство в качестве главного лица, принимающего решения по проекту. В январе 2019 года активные разработчики ядра Python избрали руководящий совет из пяти человек, который возглавит проект.

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

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

Дата окончания жизненного цикла Python 2.7 была первоначально установлена ​​на 2015 год, а затем перенесена на 2020 год из-за опасений, что большая часть существующего кода не может быть легко перенесена на Python 3. Никаких дополнительных исправлений безопасности или других улучшений выпущено не будет. для этого. С истекшим сроком службы Python 2 поддерживается только Python 3.6.x и новее.

Python 3.9.2 и 3.8.8 были ускорены, поскольку все версии Python (включая 2.7) имели проблемы с безопасностью, что приводило к возможному удаленному выполнению кода и заражению веб-кеша .

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

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

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

Дизайн Python предлагает некоторую поддержку функционального программирования в традициях Lisp . Он имеет filter, mapи reduceфункции; составить список понятий , словарей , наборов и выражений генератора . Стандартная библиотека имеет два модуля ( itertoolsи functools), которые реализуют функциональные инструменты, заимствованные из Haskell и Standard ML .

Основная философия языка кратко изложена в документе The Zen of Python ( PEP 20 ), который включает такие афоризмы , как:

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

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

Python стремится к более простому и менее загроможденному синтаксису и грамматике, давая разработчикам возможность выбора в своей методологии кодирования. В отличие от девиза Perl « есть более одного способа сделать это », Python придерживается философии дизайна «должен быть один - и желательно только один - очевидный способ сделать это». Алекс Мартелли , сотрудник в Foundation Python Software и Python автор книги пишет , что « Для того, чтобы описать то , как„умный“это не считается комплиментом в культуре Python.»

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

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

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

Пользователей и почитателей Python, особенно тех, кого считают знающими или опытными, часто называют питонистами .

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

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

Отступ

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

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

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

  • Оператор присваивания с использованием единственного знака равенства =.
  • ifЗаявление, которое условно выполняет блок кода, а также elseи elif(сжатие еще-если).
  • forЗаявление, которое перебирает итератор объекта, захватив каждый элемент в локальном переменную для использования прилагаемого блока.
  • whileЗаявление, которое выполняет блок кода до тех пор , как его условие истинно.
  • tryЗаявление, которое позволяет исключения , поднятые в прилагаемом блоке коды пойманы и обработаны exceptпунктами; это также гарантирует, что код очистки в finallyблоке всегда будет выполняться независимо от того, как блок выходит.
  • raiseЗаявление, используется для повышения заданного исключения или ререйз перехваченных исключений.
  • classЗаявление, которое выполняет блок кода и присоединяет его локальное пространство имен в класс , для использования в объектно-ориентированном программировании.
  • defУтверждение, которое определяет функцию или метод .
  • withЗаявление, которое заключает в себе блок кода в качестве менеджера контекста (например, приобретая замок до того , как блок кода выполняется захват и освобождение после этого, или открыть файл , а затем закрыть его), что позволяет ресурсов сбора-является инициализация (RAII) -подобное поведение и заменяет обычную идиому try / finally.
  • Оператор breakвыходит из цикла.
  • Оператор continueпропускает эту итерацию и переходит к следующему элементу.
  • Оператор delудаляет переменную, что означает, что ссылка из имени на значение удаляется, и попытка использовать эту переменную приведет к ошибке. Удаленную переменную можно переназначить.
  • passЗаявление, которое служит в качестве NOP . Синтаксически необходимо создать пустой блок кода.
  • assertЗаявление, используется во время отладки для проверки условий , которые должны применяться.
  • yieldУтверждение, которое возвращает значение из генератора функции и yieldтакже является оператором. Эта форма используется для реализации сопрограмм .
  • returnЗаявление, используется для возврата значения из функции.
  • importЗаявление, которое используется для импорта модулей, функции или переменные могут быть использованы в текущей программе.

Оператор присваивания ( =) работает путем привязки имени как ссылки к отдельному, динамически выделяемому объекту . Впоследствии переменные могут быть повторно привязаны к любому объекту в любое время. В Python имя переменной является универсальным держателем ссылки и не имеет связанного с ним фиксированного типа данных . Однако в данный момент переменная будет ссылаться на некоторый объект, который будет иметь тип. Это называется динамической типизацией и отличается от языков программирования со статической типизацией , где каждая переменная может содержать значения только определенного типа.

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

Выражения

Некоторые выражения Python похожи на выражения , встречающиеся в таких языках, как C и Java , а некоторые нет:

  • Сложение, вычитание и умножение одинаковы, но поведение деления отличается. В Python есть два типа разделения. Это деление по полу (или целочисленное деление) //и деление с плавающей запятой /. Python также использует **оператор для возведения в степень.
  • В Python 3.5 появился новый @инфиксный оператор. Он предназначен для использования такими библиотеками, как NumPy, для умножения матриц .
  • В Python 3.8 :=был введен синтаксис , называемый «оператором моржа». Он присваивает значения переменным как часть более крупного выражения.
  • В Python ==сравнивается по значению, а в Java сравниваются числа по значению и объекты по ссылке. (Сравнение значений в Java для объектов может выполняться с помощью этого equals()метода.) isОператор Python может использоваться для сравнения идентификаторов объектов (сравнение по ссылке). Например, в Python сравнения могут быть связаны .a <= b <= c
  • Python использует слова and, or, notдля своих логических операторов , а не символического &&, ||, !используемые в Java и C.
  • В Python есть тип выражения, называемый пониманием списка, а также более общее выражение, называемое выражением генератора .
  • Анонимные функции реализованы с использованием лямбда-выражений ; однако они ограничены тем, что тело может быть только одним выражением.
  • Условные выражения в Python записываются как (порядок операндов отличается от оператора, общего для многих других языков).x if c else yc ? x : y
  • Python делает различие между списками и кортежами . Списки записываются как изменяемые и не могут использоваться в качестве ключей словарей (ключи словаря должны быть неизменяемыми в Python). Кортежи записываются как неизменяемые и поэтому могут использоваться в качестве ключей словарей при условии, что все элементы кортежа неизменяемы. Оператор может быть использован для конкатенации два кортежа, который не непосредственно изменять их содержимое, а , скорее , создает новый кортеж , содержащий в себе элементы обоих предусмотренных кортежей. Таким образом, если переменная изначально равна , выполнение сначала вычисляет , что дает результат , который затем присваивается обратно , тем самым эффективно «изменяя содержимое» , при этом соблюдая неизменяемую природу объектов кортежа. Скобки необязательны для кортежей в однозначном контексте.[1, 2, 3](1, 2, 3)+t(1, 2, 3)t = t + (4, 5)t + (4, 5)(1, 2, 3, 4, 5)tt
  • Python включает распаковку последовательности, в которой несколько выражений, каждое из которых оценивает все, что может быть присвоено (переменная, свойство, доступное для записи и т. Д.), Связаны таким же образом, как и формирующие литералы кортежа, и в целом помещаются в левая часть знака равенства в операторе присваивания. Оператор ожидает итеративный объект в правой части знака равенства, который производит такое же количество значений, что и предоставленные записываемые выражения при повторении и будет выполнять итерацию через него, присваивая каждое из полученных значений соответствующему выражению слева .
  • В Python есть оператор «строкового формата» %. Это работает аналогично printfформатированию строк в C, например, вычисляет . В Python 3 и 2.6+ это было дополнено методом класса, например . Python 3.6 добавлен "F-строка": ."spam=%s eggs=%d" % ("blah", 2)"spam=blah eggs=2"format()str"spam={0} eggs={1}".format("blah", 2)blah = "blah"; eggs = 2; f'spam={blah} eggs={eggs}'
  • Строки в Python можно объединять , «добавляя» их (тот же оператор, что и для добавления целых чисел и чисел с плавающей запятой). Например, возвращается . Даже если ваши строки содержат числа, они все равно добавляются как строки, а не целые числа. Например, возвращается ."spam" + "eggs""spameggs""2" + "2""22"
  • В Python есть различные типы строковых литералов :
    • Строки, разделенные одинарными или двойными кавычками. В отличие от оболочек Unix , Perl и языков с влиянием Perl, одинарные кавычки и двойные кавычки работают одинаково. В обоих типах строк \в качестве escape-символа используется обратная косая черта ( ) . Строковая интерполяция стала доступна в Python 3.6 как «форматированные строковые литералы».
    • Строки в тройных кавычках, которые начинаются и заканчиваются серией из трех одинарных или двойных кавычек. Они могут занимать несколько строк и функционировать как здесь документы в оболочках, Perl и Ruby .
    • Необработанные строковые разновидности, обозначаемые префиксом строкового литерала с расширением r. Escape-последовательности не интерпретируются; следовательно, необработанные строки полезны там, где обычны буквальные обратные косые черты, такие как регулярные выражения и пути в стиле Windows . Сравните « @-квотирование» в C # .
  • Python имеет индекс массива и выражения нарезки массива в списках, обозначенные как a[key], или . Индексы отсчитываются от нуля , а отрицательные индексы относятся к концу. Ломтики взять элементы из стартового индекса до, но не включая, стоп индекс. Третий параметр среза, называемый step или stride , позволяет пропускать и переворачивать элементы. Индексы срезов могут быть опущены, например, возвращает копию всего списка. Каждый элемент фрагмента - это неглубокая копия .a[start:stop]a[start:stop:step]a[:]

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

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

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

Методы

Методы объектов - это функции, прикрепленные к классу объекта; синтаксис для обычных методов и функций является синтаксическим сахаром для . Методы Python имеют явный параметр для доступа к данным экземпляра , в отличие от неявного self (или ) в некоторых других объектно-ориентированных языках программирования (например, C ++ , Java, Objective-C или Ruby ). Помимо этого, Python также предоставляет методы, часто называемые dunder-методами (из-за того, что их имена начинаются и заканчиваются двойным подчеркиванием), чтобы позволить определяемым пользователем классам изменять способ их обработки с помощью собственных операций, таких как длина, сравнение, в арифметике. операции, преобразование типов и многое другое. instance.method(argument)Class.method(instance, argument)selfthis

Набор текста

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

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

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

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

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

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

1.33333

frozenset неизменный Неупорядоченный набор , не содержащий дубликатов; может содержать смешанные типы, если хешируемый frozenset([4.0, 'string', True])
int неизменный Целое число неограниченной величины 42
list изменчивый Список , может содержать смешанные типы [4.0, 'string', True]
[]
NoneType неизменный Объект, представляющий отсутствие значения, часто называемый null в других языках. None
NotImplementedType неизменный Заполнитель, который может быть возвращен перегруженными операторами для указания неподдерживаемых типов операндов. NotImplemented
range неизменный Последовательность чисел, обычно используемая для выполнения определенного количества forциклов в циклах. range(-1, 10)
range(10, -5, -2)
set изменчивый Неупорядоченный набор , не содержащий дубликатов; может содержать смешанные типы, если хешируемый {4.0, 'string', True}
set()
str неизменный Строка символов : последовательность кодовых Unicode 'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines"""
tuple неизменный Может содержать смешанные типы (4.0, 'string', True)
('single element',)
()

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

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

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

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

  • Текущий Python (т.е. с /версии 3.0) изменен на всегда деление с плавающей запятой, например .5/2 == 2.5
  • 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 для деления (см. Далее).from __future__ import division
  • Python 2.1 и более ранние версии использовали поведение деления C. /Оператор целочисленное деление , если оба операнда являются целыми числами, и деление с плавающей точкой в противном случае. Целочисленное деление округляется до 0, например, и .7/3 == 2-7/3 == -2

С точки зрения Python, /это верно деление (или просто разделение ), и //это пол деление. /до версии 3.0 классическое деление .

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

Python предоставляет roundфункцию округления числа с плавающей запятой до ближайшего целого числа. Для разрешения конфликтов Python 3 использует округление до четности : round(1.5)и round(2.5)оба производят 2. В версиях до 3 использовалось округление от нуля : round(0.5)есть 1.0, round(-0.5)есть −1.0.

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

Python использует арифметику произвольной точности для всех целочисленных операций. DecimalТипа / класс в decimalмодуле дает число с плавающей десятичной точкой с заранее определенной точностью и произвольной несколько режимов округления. FractionКласс в fractionsмодуле обеспечивает произвольную точность для рациональных чисел .

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

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

Программа Hello World :

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')

factorial = 1
for i in range(2, n + 1):
    factorial *= i

print(factorial)

Библиотеки

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

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

По состоянию на сентябрь 2021 года индекс пакетов Python (PyPI), официальный репозиторий стороннего программного обеспечения Python, содержит более 329000 пакетов с широким набором функций, в том числе:

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

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

Другие оболочки, включая IDLE и IPython , добавляют дополнительные возможности, такие как улучшенное автозаполнение, сохранение состояния сеанса и подсветка синтаксиса .

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

Реализации

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

CPython - эталонная реализация Python. Он написан на C, соответствует стандарту C89 с несколькими избранными функциями C99 (с более поздними версиями C он считается устаревшим; CPython включает свои собственные расширения C, но сторонние расширения не ограничиваются более старыми версиями C, например, могут быть реализованы с C11 или C ++). Он компилирует программы Python в промежуточный байт-код, который затем выполняется его виртуальной машиной . CPython распространяется с большой стандартной библиотекой, написанной на смеси C и собственного Python. Он доступен для многих платформ, включая Windows (начиная с Python 3.9 установщик Python намеренно не может быть установлен в Windows 7 и 8; Windows XP поддерживалась до Python 3.5) и большинство современных Unix-подобных систем, включая macOS (и Apple M1 Mac, начиная с Python 3.9.1, с экспериментальным установщиком) и неофициальной поддержкой, например, VMS . Переносимость платформы была одним из ее первых приоритетов, во время периода Python 1 и Python 2 поддерживались даже OS / 2 и Solaris ; с тех пор поддержка была прекращена для многих платформ.

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

  • PyPy - это быстрый совместимый интерпретатор Python 2.7 и 3.6. Его своевременный компилятор обеспечивает значительное улучшение скорости по сравнению с CPython, но несколько библиотек, написанных на C, не могут использоваться с ним.
  • Stackless Python - это важный форк CPython, реализующий микропотоки ; он не использует стек вызовов таким же образом, что позволяет выполнять массово параллельные программы. PyPy также имеет версию без стека.
  • MicroPython и CircuitPython - это варианты Python 3, оптимизированные для микроконтроллеров , включая Lego Mindstorms EV3 .
  • Pyston - это вариант среды выполнения Python, который использует своевременную компиляцию для ускорения выполнения программ Python.
  • Cinder - это ориентированный на производительность форк CPython 3.8, который содержит ряд оптимизаций, включая встроенное кэширование байт-кода, активную оценку сопрограмм, JIT метода за раз и экспериментальный компилятор байт-кода.

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

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

  • Google начал проект под названием Unladen Swallow в 2009 году с целью пятикратного ускорения интерпретатора Python за счет использования LLVM и улучшения его способности многопоточности с масштабированием до тысяч ядер, в то время как обычные реализации страдают от глобальной блокировки интерпретатора .
  • Психо является прекращен только по времени , специализирующимся компилятор , который интегрируется с CPython и преобразованием байт - кода в машинный код во время выполнения. Созданный код специализируется на определенных типах данных и работает быстрее, чем стандартный код Python. Psyco не поддерживает Python 2.7 или новее.
  • PyS60 был интерпретатором Python 2 для мобильных телефонов Series 60, выпущенным Nokia в 2005 году. Он реализовал многие модули из стандартной библиотеки и некоторые дополнительные модули для интеграции с операционной системой Symbian . Nokia N900 также поддерживает Python с библиотеками виджетов GTK , позволяя писать и запускать программы на целевом устройстве.

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

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

  • Cython компилирует (надмножество) Python 2.7 в C (в то время как полученный код также можно использовать с Python 3, а также, например, с C ++).
  • Nuitka компилирует Python в C ++.
  • Pythran компилирует подмножество Python 3 в C ++.
  • Pyrex (последний выпуск в 2010 г.) и Shed Skin (последний выпуск в 2013 г.) компилируются на C и C ++ соответственно.
  • Grumpy от Google (последний выпуск в 2017 году) переводит Python 2 на Go .
  • IronPython (в настоящее время заброшенный Microsoft) позволяет запускать программы Python 2.7 в .NET Common Language Runtime .
  • Jython компилирует Python 2.7 в байт-код Java, позволяя использовать библиотеки Java из программы Python.
  • MyHDL - это язык описания оборудования (HDL) на основе Python , который преобразует код MyHDL в код Verilog или VHDL .
  • Numba использует LLVM для компиляции подмножества Python в машинный код.
  • Brython, Transcrypt и Pyjs (последний выпуск в 2012 году) компилируют Python в JavaScript .
  • RPython может быть скомпилирован на C и используется для создания интерпретатора Python PyPy.

Представление

Сравнение производительности различных реализаций Python на нечисловой (комбинаторной) рабочей нагрузке было представлено на EuroSciPy '13. Производительность Python по сравнению с другими языками программирования также проверяется The Computer Language Benchmarks Game .

Разработка

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

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

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

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

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

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

Python 3.10 устарел wstr(будет удален в Python 3.12; это означает, что к тому времени необходимо будет изменить расширения Python), а также планирует добавить сопоставление с образцом в язык.

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

Инструменты, которые могут генерировать документацию для Python API, включают pydoc (доступный как часть стандартной библиотеки), Sphinx , Pdoc и его форки, Doxygen и Graphviz , среди других.

Именование

Название Python происходит от британской комедийной группы Monty Python, которой создатель Python Гвидо ван Россум наслаждался во время разработки языка. Ссылки Monty Python часто появляются в коде и культуре Python; например, метасинтаксические переменные, часто используемые в литературе по Python, - это спам и яйца вместо традиционных foo и bar . Официальная документация Python также содержит различные ссылки на подпрограммы Monty Python.

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

Популярность

С 2003 года Python неизменно входит в десятку самых популярных языков программирования в Индексе сообщества программистов TIOBE, где по состоянию на октябрь 2021 года он является самым популярным языком (опережая Java и C). Он был выбран языком программирования года (за «самый высокий рост рейтингов за год») в 2007, 2010, 2018 и 2020 годах (единственный язык, который делал это четыре раза).

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

Крупные организации, использующие Python, включают Википедию , Google , Yahoo! , CERN , NASA , Facebook , Amazon , Instagram , Spotify и некоторые более мелкие организации, такие как ILM и ITA . Социальная новостная сеть Reddit была написана в основном на Python.

Использует

Питон на питании

Python может служить языком сценариев для веб-приложений , например, через mod_wsgi для веб-сервера Apache . В интерфейсе шлюза веб-сервера был разработан стандартный API для упрощения работы этих приложений. Веб-фреймворки, такие как Django , Pylons , Pyramid , TurboGears , web2py , Tornado , Flask , Bottle и Zope, поддерживают разработчиков в разработке и обслуживании сложных приложений. Pyjs и IronPython могут использоваться для разработки клиентских приложений на основе Ajax. SQLAlchemy можно использовать как средство отображения данных в реляционной базе данных. Twisted - это фреймворк для программирования связи между компьютерами, который используется (например) в Dropbox .

Такие библиотеки, как NumPy , SciPy и Matplotlib, позволяют эффективно использовать Python в научных вычислениях, со специализированными библиотеками, такими как Biopython и Astropy, обеспечивающими функциональность, специфичную для конкретной предметной области. SageMath - это система компьютерной алгебры с интерфейсом записной книжки, программируемым на Python: ее библиотека охватывает многие аспекты математики , включая алгебру , комбинаторику , числовую математику , теорию чисел и исчисление . OpenCV имеет привязки Python с богатым набором функций для компьютерного зрения и обработки изображений .

Python обычно используется в искусственном интеллекте проектов и проектах машинного обучения с помощью библиотек как TensorFlow , Keras , Pytorch и Scikit учиться . Как язык сценариев с модульной архитектурой , простым синтаксисом и инструментами обработки расширенного текста Python часто используется для обработки естественного языка .

Python был успешно встроен во многие программные продукты в качестве языка сценариев, в том числе в программное обеспечение для метода конечных элементов, такое как Abaqus , средство параметрического моделирования 3D, такое как FreeCAD , пакеты 3D-анимации, такие как 3ds Max , Blender , Cinema 4D , Lightwave , Houdini , Maya , modo. , MotionBuilder , Softimage , редактор визуальных эффектов Nuke , программы для создания 2D-изображений, такие как GIMP , Inkscape , Scribus и Paint Shop Pro , а также программы для нотной записи , такие как Scorewriter и capella . GNU Debugger использует Python как красивый принтер для отображения сложных структур, таких как контейнеры C ++. Esri продвигает Python как лучший выбор для написания скриптов в ArcGIS . Он также использовался в нескольких видеоиграх и был принят как первый из трех доступных языков программирования в Google App Engine , два других - Java и Go .

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

Python широко используется в индустрии информационной безопасности , в том числе при разработке эксплойтов.

Большая часть программного обеспечения Sugar для One Laptop per Child XO, разрабатываемого в настоящее время в Sugar Labs , написано на Python. В проекте одноплатного компьютера Raspberry Pi в качестве основного языка пользовательского программирования принят Python.

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

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

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

  • Boo использует отступ, аналогичный синтаксис и аналогичную объектную модель.
  • Cobra использует отступы и аналогичный синтаксис, и в его документе « Благодарности» Python первым среди языков, оказавших на него влияние, указан Python.
  • CoffeeScript , язык программирования, который перекрестно компилируется с JavaScript, имеет синтаксис, вдохновленный Python.
  • ECMAScript / JavaScript заимствовал итераторы и генераторы из Python.
  • GDScript , язык сценариев, очень похожий на Python, встроенный в игровой движок Godot .
  • Go разработан для «скорости работы на динамическом языке, таком как Python», и использует тот же синтаксис для нарезки массивов.
  • Groovy был мотивирован желанием перенести философию проектирования Python в Java .
  • Julia была разработана таким образом, чтобы ее можно было «использовать для общего программирования так же, как и на Python».
  • Nim использует отступы и аналогичный синтаксис.
  • Создатель Ruby , Юкихиро Мацумото , сказал: «Мне нужен язык сценариев, который был бы более мощным, чем Perl, и более объектно-ориентированным, чем Python. Вот почему я решил разработать свой собственный язык».
  • Swift , язык программирования, разработанный Apple, имеет синтаксис, вдохновленный Python.

Методы разработки Python также были скопированы на других языках. Например, практика требования документа, описывающего обоснование и проблемы, связанные с изменением языка (в Python, PEP), также используется в Tcl , Erlang и Swift.

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

использованная литература

Источники

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

внешние ссылки