Skip to content

Latest commit

 

History

History
170 lines (112 loc) · 17 KB

File metadata and controls

170 lines (112 loc) · 17 KB

Python

Описание

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

Полезные ссылки