Python
Python — объектно-ориентированный язык программирования высокого уровня с динамической семантикой.[1] Структуры данных высокого уровня вместе с динамической семантикой и динамичным связыванием делают ее привлекательной для быстрой разработки программ, а также как средство объединения существующих компонентов. Python поддерживает модули и пакеты модулей способствует модульности и повторному использованию кода. Интерпретатор Python и стандартные библиотеки доступны как в откомпилированной так и в исходной форме на всех основных платформах. В языке программирования Python поддерживается несколько парадигм программирования.
История[править]
Разработка языка Python была начата в конце 1980-х годов[2] сотрудником голландского института CWI Гвидо ван Россумом. Для распределенной ОС Amoeba потребовался расширяемый скриптовый язык, и Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию). В феврале 1991 года Гвидо опубликовал исходный текст в группе новостей alt.sources.[3] Язык начал свободно распространяться через Интернет, и понравился другим программистам. С самого начала Python проектировался как объектно-ориентированный язык. Python также позаимствовал многие черты таких языков, как C, C++, Modula-3 и Icon, и отдельные черты функционального программирования с Lisp.
Название языка возникла вовсе не от вида пресмыкающихся. Автор назвал язык в честь популярного британского комедийного сериала 70-х годов «Воздушный цирк Монти Пайтона». Впрочем, все равно название языка чаще ассоциируют именно со змеей, чем с фильмом — пиктограммы файлов в KDE или в Windows, а также эмблема на сайте python.org изображают змеиную голову.
Наличие дружественного сообщества пользователей считается наряду с дизайнерской интуицией Гвидо, одним из главных факторов успеха Python. Развитие речи происходит согласно четко регламентированными процессами создания, обсуждения, отбора и реализации документов PEP (Python Enhancement Proposal) — предложений по развитию Python.[4]
3 декабря 2008 года,[5] после длительного тестирования, вышла первая версия Python 3000 (или Python 3.0, также используется сокращенная Py3k). В Python 3000 устранены многие недостатки архитектуры с максимально возможным (но не полным) сохранением совместимости со старыми версиями. На сегодня поддерживаются обе ветви развития (Python 3.2 и 2.7).
Портированность[править]
Python портирован и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, все варианты UNIX (включая FreeBSD и GNU/Linux), Mac OS и Mac OS X, iOS и Android.[6]
По мере старения платформы ее поддержка в основной ветке языка прекращается. Например, из серии 2.6 прекращена поддержка Windows 95, Windows 98 и Windows ME.[7] Однако на этих платформах можно использовать предыдущие версии Python — теперь сообщество активно поддерживает версии Python начиная от 2.3 (для них выходят исправления).
При этом, в отличие от многих портированных систем, для всех основных платформ Python имеет поддержку характерных для данной платформы технологий. Более того, существует специальная версия Python для виртуальной машины Java — Jython, что позволяет интерпретатору выполняться на любой системе, которая поддерживает Java, при этом классы Java могут непосредственно использоваться с Python и даже быть написанными на нем. Также несколько проектов обеспечивают интеграцию с платформой Microsoft.NET, основные из которых — IronPython и Python.Net.
Типы и структуры данных[править]
Python поддерживает динамическую типизацию, то есть, тип переменной определяется только во время исполнения. Из базовых типов следует отметить поддержку целых чисел произвольной длины и комплексных чисел . Python имеет богатую библиотеку для работы с строками, в частности, кодированными в Юникоде.
Из коллекций Python поддерживает кортежи (tuples), списки (массивы), словари (ассоциативные массивы) и, начиная с версии 2.4, множества.
Возможности[править]
Интерактивный режим[править]
Подобно Lisp и Prolog в режиме отладки, интерпретатор Python имеет интерактивный режим работы, при котором введенные с клавиатуры операторы сразу же выполняются, а результат выводится на экран. Этот режим интересен не только новичкам, но и опытным программистам, которые могут протестировать в интерактивном режиме любой участок кода, прежде чем использовать его в основной программе, или просто использовать как калькулятор с большим набором функций.
Объектно-ориентированное программирование[править]
Дизайн языка Python построен вокруг объектно-ориентированной модели программирования. Реализация ООП в Python является элегантной, мощной и хорошо продуманной, но вместе с тем, достаточно специфической по сравнению с другими объектно-ориентированными языками.
Возможности и особенности:
- Классы являются одновременно объектами со всеми ниже приведенными возможностями.
- Наследование, в том числе множественное.
- Полиморфизм (все функции виртуальные).
- Инкапсуляция (два уровня — общедоступные и скрытые методы и поля). Особенность — скрытые члены доступны для использования и помечены как скрытые лишь особыми именами.
- Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти.
- Перегрузка операторов (всех, кроме is, '.', '=' и символьных логических).
- Свойства (имитация поля с помощью функций).
- Управление доступа к полям (эмуляция полей и методов, частичный доступ и т. д.).
- Методы для управления самыми распространенными операциями (глубокое копирования, сериализация, итерация по объекту)
- Метапрограммирования (управление созданием классов, триггеры на создание классов, и др)
- Полная интроспекция.
- Классовые и статические методы, классовые поля.
- Классы, вложенные в функции и другие классы.
Функциональное программирование[править]
Python поддерживает парадигму функционального программирования, в частности:
- функции высших порядков;
- рекурсию;
- развитая обработка списков (списке выражения, операции над последовательностями, итераторы);
- аналог замыканий (closures);
- частичное применение функции;
- возможность реализации других средств на самом языке (например, карринг).
Модули и пакеты[править]
Программное обеспечение на Python оформляется в виде модулей, которые в свою очередь могут быть собраны в пакеты. Модули могут располагаться как в каталогах, так и в ZIP-архивах. Модули могут быть двух типов по своему происхождению: модули, написанные на «чистом» Python и модули расширения (extension modules), написанные на других языках программирования. Например, в стандартной библиотеке есть «чистый» модуль pickle и его аналог на Си: cPickle. Модуль оформляется в виде отдельного файла, а пакет — в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import . После импорта модуль представлен отдельным объектом, дающим доступ к пространству имен модуля. В ходе выполнения программы модуль можно перезагрузить функцией reload ().
Интроспекция[править]
Python поддерживает полную интроспекцию времени исполнения. Это означает, что для любого объекта можно получить всю информацию о его внутренней структуре.
Применение интроспекции (метапрограммирования) является важной частью того, что называют «pythonic style», и широко применяется в библиотеках и фреймворках Python, экономя время программиста.
Обработка исключений[править]
Обработка исключений поддерживается в Python помощью операторов try, except, else, finally, raise, образующих блок обработки исключений. Совместное использование else, except и finally стало возможно только начиная с Python 2.5. Информация о текущем исключение всегда доступна через sys.exc_info (). Кроме значение исключения, Python также сохраняет состояние стека до точки возбуждения исключения — так называемый traceback.
В отличие от языков программирования, в Python использование исключение не приводит к значительным накладным расходам (а часто даже позволяет ускорить выполнение программ) и очень широко используется. Исключения согласуются с философией Python (10-й пункт «дзена Python» — «Ошибки никогда не должны игнорироваться») и является одним из средств поддержания «утиной типизации».
Иногда, вместо явной обработки исключений удобнее использовать блок with (доступен, начиная с Python 2.5).
Итераторы[править]
В программах на Python широко используются итераторы. Цикл for может работать как с последовательностью, так и с итераторами. Все коллекции, как правило, предоставляют итератор. Объекты определенного пользователем класса тоже могут быть итераторами. Модуль itertools стандартной библиотеки содержит много полезных функций для работы с итераторами. В отличие от обычных последовательностей, все элементы которых хранятся в памяти, получения следующего элемента обеспечивает генератор — специальная функция, обращение к которой вычисляет и возвращает следующий элемент генератора.
Генераторы[править]
Одной из интересных возможностей языка являются генераторы — функции, между вызовами сохраняют внутреннее состояние: значения локальных переменных и текущую инструкцию (см. также: супрограма). Генераторы могут использоваться как итераторы для структур данных и для ленивых вычислений.
При вызове генератора функция немедленно возвращает объект-итератор, который хранит текущую точку исполнения и состояние локальных переменных функции. При запросе следующего значения (с помощью метода next (), неявно вызывается в for цикле) генератор продолжает выполнение функции от предыдущей точки останова до следующего оператора yield или return.
В Python 2.4 появились генераторные выражения — выражения, дающие в результате генератор. Генераторные выражения позволяют сэкономить память там, где иначе нужно было бы использовать список с промежуточными результатами:
Начиная с версии 2.5, Python поддерживает полноценные спивпроцедуры: теперь в генератор можно передавать значения с помощью метода send () и возбуждать в его контексте исключения с помощью метода throw ().
Управление контекстом выполнения[править]
В Python 2.5 появились средства для управления контекстом выполнения блока кода — оператор with и модуль contextlib.
Оператор может применяться в тех случаях, когда до и после некоторых действий обязательно должны выполняться какие-то другие действия, независимо от созданных в блоке исключений или операторов return: файлы должны быть закрыты, ресурсы освобождены, перенаправление стандартного ввода/вывода завершено, и тому подобное. Оператор облегчает чтение кода, следовательно, помогает избегать ошибок.
Декораторы[править]
Начиная с версии 2.4, Python позволяет использовать так называемые декораторы[8] (не следует путать с одноименным шаблоном проектирования) для поддержки существующей практики преобразования функций и методов в месте определения (декораторов может быть несколько). После долгих дебатов для декораторов стал использоваться символ @ в строках, предшествующих определению функции или метода.
С версии 2.6 декораторы можно использовать с классами, аналогично функциям.
Система классов поддерживает множественное наследование и метапрограммирование. Любой тип, включая базовый, входит в систему классов, и при необходимости возможно наследование даже от базовых типов.
Специализированные подмножества/расширения Python[править]
На основе Python было создано несколько специализированных подмножеств языка, в основном предназначенных для статической компиляции в машинный код. Некоторые из них:
- RPython[9] — созданная в рамках проекта PyPy значительно ограничена реализация Python без динамизма времени исполнения и некоторых других возможностей. RPython код можно компилировать во множество других языков / платформ — C, JavaScript, Lisp, .NET[10], LLVM. На RPython написан интерпретатор PyPy.
- Pyrex[11] — ограниченная реализация Python, но чуть меньше, чем RPython. PyReX расширен возможностями статической типизации типами из языка С и позволяет свободно смешивать типизированный но не типизированной код. Предназначен для написания модулей расширений, компилируется в код на языке С.
- Cython[12] — расширенная версия Pyrex.
- pyastra[13] — компилятор Python кода в ассемблер для PIC архитектуры.
- shed-skin[14] — предназначен для компиляции неявно статически типизированного Python кода в оптимизированный код на языке С++, проект далек от завершения.
Источники[править]
- ↑ Guido Van Rossum, Python Reference Manual, release 2.4.4, 18 October 2006.
- ↑ The Making Of Python
- ↑ [1]
- ↑ Index Of Python Enhancement Proposals (PEPs)
- ↑ Python 3.0 Release
- ↑ «Python on Android»
- ↑ «Port-Specific Changes: Windows» Python v2.6.1 documentation. What’s New in Python 2.6 (англ.) Python Software Foundation.
- ↑ PEP318
- ↑ PyPy (coding-guide)
- ↑ PyPy (carbonpython)
- ↑ Pyrex
- ↑ Cython C-Extensions for Python
- ↑ Pyastra: python assembler translator
- ↑ Shed Skin — An Optimizing Python-to-C ++ Compiler
Ссылки[править]
- Python в энциклопедии «Викиреальность»
- Python в Абсурдопедии на Викии