Крутые модули Python, которые вы не используете, а надо бы

Крутые модули Python, которые вы не используете, а надо бы

Язык Python – прекрасен, и содержит много встроенных модулей, которые помогают сделать код более качественным и красивым.

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

Полагаем, некоторые из вас уже знакомы с более популярным именованным кортежем namedtuple из модуля collections (если нет – ознакомьтесь). Но начиная с Python 3.6, в модуле typing доступен новый класс: NamedTuple . Оба предназначены для быстрого создания читаемых неизменяемых объектов.

NamedTuple – на самом деле типизированная версия namedtuple и, по мнению разработчика, этот класс гораздо более читаемый:

Вот альтернатива c использованием namedtuple :

Эффективные массивы числовых значений. Массивы относятся к типу последовательностей и ведут себя как списки, за исключением того, что тип хранящихся в них объектов ограничен. — документация Python

Когда используется модуль array , создание массива происходит с указанием типа данных, который будут использовать все его элементы. Давайте сравним время выполнения кода с обычным списком, записав много целых чисел в файл (используя модуль pickle для обычного списка):

Крутые модули Python, которые вы не используете, а надо бы

https://gist.github.com/AdamGold/961758c66cdfe92642eabb61d9ce9866

В 14 раз быстрее. Это много. Конечно, время выполнения также зависит и от модуля pickle , но всё же массив гораздо компактнее, чем список. Поэтому, если используете простые числовые значения, рассматривайте использование модуля array .

itertools – впечатляющий модуль. У него так много разных методов, позволяющих экономить время. Есть даже репозиторий GitHub, содержащий ещё больше подобных инструментов.

Давайте посмотрим на метод combinations . Он принимает в качестве аргументов итерируемый объект и целое число. В результате получаем генератор, состоящий из всех возможных комбинаций итерируемого объекта. Максимальная длина последовательности равна указанному целому числу. Сочетания не дублируются:

Быстрый и красивый способ создания словаря со значениями по умолчанию:

Модуль dis обеспечивает анализ байт-кода CPython путём его дизассемблирования.

Как вы наверняка знаете, Python компилирует исходный код в набор инструкций под названием «байт-код». Модуль dis помогает обрабатывать эти инструкции. И это отличный инструмент для отладки.

Вот пример из книги «Fluent Python»:

Получили ошибку, но операция всё равно завершилась. Как так? Узнаем, если посмотрим на байт-код (добавлены комментарии рядом с важными частями):