Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Стандартная библиотека включает большой объем полезных функций.
Python поддерживает несколько парадигм программирования, в том числе объектно-ориентированное и функциональное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, механизм обработки исключений, поддержка многопоточных вычислений и удобные структуры данных. Код в Python организовывается в функции и классы, которые можно объединять в модули.
Преимущества использования Python:
- Высокая скорость разработки
- Кроссплатформенность
- Большое количество разнообразных библиотек
- Простота изучения
- Легкое использование механизмов модульности
Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализация интерпретатора для JVM с возможностью компиляции, CLR, LLVM, другие независимые реализации. Проект PyPy использует JIT-компиляцию, которая значительно увеличивает скорость выполнения Python-программ.
Python — активно развивающийся язык программирования, новые версии с добавлением/изменением языковых свойств выходят примерно раз в два с половиной года. Язык не подвергался официальной стандартизации, роль стандарта де-факто выполняет CPython, разрабатываемый под контролем автора языка.
Дизайн языка Python построен вокруг объектно-ориентированной модели программирования. Реализация ООП в Python является элегантной, мощной и хорошо продуманной, но вместе с тем достаточно специфической по сравнению с другими объектно-ориентированными языками.
Возможности и особенности:
- Классы являются одновременно объектами со всеми ниже приведенными возможностями
- Наследование, в том числе множественное
- Полиморфизм (все функции виртуальные)
- Инкапсуляция (два уровня — общедоступные и скрытые методы и поля). Особенность — скрытые члены доступны для использования и помечены как скрытые лишь особыми именами
- Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти
- Перегрузка операторов (всех, кроме
is
,.
,=
и символьных логических) - Свойства (имитация поля с помощью функций)
- Управление доступом к полям (эмуляция полей и методов, частичный доступ, и т. п.)
- Методы для управления наиболее распространенными операциями (истинностное значение,
len()
, глубокое копирование, сериализация, итерация по объекту, …) - Метапрограммирование (управление созданием классов, триггеры на создание классов, и др.)
- Полная интроспекция
- Классовые и статические методы, классовые поля
- Классы, вложенные в функции и классы
Python поддерживает парадигму функционального программирования, в частности:
- Функция является объектом
- Функции высших порядков
- Рекурсия
- Развитая обработка списков (списочные выражения, операции над последовательностями, итераторы)
- Аналог замыканий
- Частичное применение функции
- Возможность реализации других средств на самом языке (например, карринг)
Программное обеспечение (приложение или библиотека) на Python оформляется в виде модулей, которые в свою очередь могут быть собраны в пакеты. Модули могут располагаться как в каталогах, так и в ZIP-архивах. Модули могут быть двух типов по своему происхождению: модули, написанные на "чистом" Python, и модули расширения (extension modules), написанные на других языках программирования. Например, в стандартной библиотеке есть "чистый" модуль pickle
и его аналог на C: cPickle
. Модуль оформляется в виде отдельного файла, а пакет — в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import
. После импорта модуль представлен отдельным объектом, дающим доступ к пространству имен модуля. В ходе выполнения программы модуль можно перезагрузить функцией reload()
.
Python поддерживает полную интроспекцию времени исполнения. Это означает, что для любого объекта можно получить всю информацию о его внутренней структуре.
Применение интроспекции является важной частью того, что называют pythonic style, и широко применяется в библиотеках и фреймворках Python, таких как PyRO, PLY, Cherry, Django и др., значительно экономя время использующего их программиста.
Обработка исключений поддерживается в Python посредством операторов try
, except
, else
, finally
, raise
, образующих блок обработки исключения.
Совместное использование else
, except
и finally
стало возможно только начиная с Python 2.5. Информация о текущем исключении всегда доступна через sys.exc_info()
. Кроме значения исключения, Python также сохраняет состояние стека вплоть до точки возбуждения исключения — так называемый traceback.
В отличие от компилируемых языков программирования, в Python использование исключения не приводит к значительным накладным расходам (а зачастую даже позволяет ускорить исполнение программ) и очень широко используется. Исключения согласуются с философией Python (10-й пункт "дзена Python" — "Ошибки никогда не должны умалчиваться") и являются одним из средств поддержки "утиной типизации".
В программах на Python широко используются итераторы. Цикл for
может работать как с последовательностью, так и с итератором. Все коллекции, как правило, предоставляют итератор. Объекты определенного пользователем класса тоже могут быть итераторами. Модуль itertools
стандартной библиотеки содержит много полезных функций для работы с итераторами.
Одной из интересных возможностей языка являются генераторы — функции, сохраняющие внутреннее состояние: значения локальных переменных и текущую инструкцию. Генераторы могут использоваться как итераторы для структур данных и для ленивых вычислений.
При вызове генератора функция немедленно возвращает объект-итератор, который хранит текущую точку исполнения и состояние локальных переменных функции. При запросе следующего значения (посредством метода next()
, неявно вызываемого в цикле for
) генератор продолжает исполнение функции от предыдущей точки останова до следующего оператора yield
или return
.
Начиная с версии 2.5, Python поддерживает полноценные сопроцедуры: теперь в генератор можно передавать значения с помощью метода send()
и возбуждать в его контексте исключения с помощью метода throw()
.
В Python 2.5 появились средства для управления контекстом выполнения блока кода — оператор with
и модуль contextlib
.
Оператор может применяться в тех случаях, когда до и после некоторых действий должны обязательно выполняться некоторые другие действия, независимо от возбужденных в блоке исключений или операторов return: файлы должны быть закрыты, ресурсы освобождены, перенаправление стандартного ввода вывода закончено и т. п. Оператор улучшает читаемость кода, а значит, помогает предотвращать ошибки.
Начиная с версии 2.4, Python позволяет использовать так называемые декораторы (не следует путать с одноименным шаблоном проектирования) для поддержки существующей практики преобразования функций и методов в месте определения (декораторов может быть несколько). Для декораторов используется символ @
в строках, предшествующих определению функции или метода. Синтаксис декорирования является синтаксическим сахаром для удобочитаемости.
Сам декоратор является функцией, получающей в качестве первого аргумента декорируемую функцию. Для передачи дополнительных аргументов можно использовать синтаксис @декоратор(аргументы)
. Декораторы можно считать элементом аспектно-ориентированного программирования.
С версии 2.6 декораторы можно использовать с классами аналогично функциям.
Формат регулярных выражений унаследован из Perl с некоторыми отличиями. Для их использования требуется импортировать модуль re
, являющийся частью стандартной библиотеки.
В Python типы данных можно разделить на встроенные в интерпретатор (built-in) и не встроенные, которые можно использовать при импортировании соответствующих модулей.
К основным встроенным типам относятся:
None
— неопределенное значение переменной- Логические переменные (Boolean Type)
bool
- Числа (Numeric Type)
int
— целое числоfloat
— число с плавающей точкойcomplex
— комплексное число
- Списки (Sequence Type)
list
— списокtuple
— кортежrange
— диапазон
- Строки (Text Sequence Type)
str
- Бинарные списки (Binary Sequence Types)
bytes
— байтыbytearray
— массивы байтmemoryview
— специальные объекты для доступа к внутренним данным объекта через protocol buffer
- Множества (Set Types)
set
— множествоfrozenset
— неизменяемое множество
- Словари (Mapping Types)
dict
— словарь
Все типы Python можно разделить на изменяемые и неизменяемые:
- Неизменяемые (immutable) типы —
int
,float
,complex
,bool
,tuple
,str
,frozenset
- Изменяемые (mutable) типы —
list
,set
,dict
# Ubuntu
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.7
# macOS
brew install python3