Найти в Дзене
Nuances of programming

Полезные Python модули, которыми мало кто пользуется

Оглавление

Источник: Nuances of Programming

-2

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

Цель

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

NamedTuple

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

Вообще, NamedTuple — это типизированная версия namedtupleс лучшей читабельностью:

-3

array.array

Эффективные массивы числовых значений. Массивы — это типы последовательности. Они очень похожи на списки, однако ограничены хранимым в них типом объектов. — Python docs

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

-4
-5

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

itertools.combinations

itertools— это отличный модуль. В нем присутствует множество методов для экономии времени. Полный список см. здесь. Есть даже целый GitHub репозиторий с еще большим количеством itertools!

На этой неделе я поработал с методом combinations и решил им поделиться. Этот метод принимает в качестве аргументов iterable и integer, а затем создает генератор со всеми возможными сочетаниями iterable и максимальной длиной из integer, без задвоения:

In [16]: import itertools
In [17]: list(itertools.combinations([1, 2, 3, 4], 2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

dict.fromkeys

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

-6

Последний, но не менее важный — модуль dis

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

Быть может, вы уже знаете(или не знаете) о том, что Python компилирует исходный код в набор инструкций. Они и называются «байт-кодом». А модуль dis позволяет их обрабатывать. Это отличный инструмент для отладки.

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

-7

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

-8

Читайте нас в телеграмме и vk

Перевод статьи Adam Goldschmidt: Awesome Python modules you probably aren’t using (but should be)