Источник: Nuances of Programming
Python — это прекрасный язык с множеством встроенных модулей, цель которых — помочь нам писать более красивый и качественный код.
Цель
В данной статье мы будем работать с малоизвестными методами и модулями, которые могут улучшить эффективность и внешний вид кода.
NamedTuple
Некоторые из вас уже слышали о популярном namedtupleиз модуляcollections(если нет, — читайте здесь). Но, начиная с Python 3.6, в модулеtyping появился новый класс: NamedTuple. Оба они позволяют быстро создавать читабельные неизменяемые объекты.
Вообще, NamedTuple — это типизированная версия namedtupleс лучшей читабельностью:
array.array
Эффективные массивы числовых значений. Массивы — это типы последовательности. Они очень похожи на списки, однако ограничены хранимым в них типом объектов. — Python docs
При работе с модулем array сначала нужно создать его экземпляры через typecode. Typecode — это тип, который будут использовать все элементы массива. Давайте сравним эффективность его выполнения с обычным списком. Для этого запишем в файл множество целых чисел (для обычного списка подойдет модуль pickle):
В 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 со стандартными значениями:
Последний, но не менее важный — модуль dis
Модуль dis поддерживает анализ байт-кода CPython путем его обратного разложения.
Быть может, вы уже знаете(или не знаете) о том, что Python компилирует исходный код в набор инструкций. Они и называются «байт-кодом». А модуль dis позволяет их обрабатывать. Это отличный инструмент для отладки.
Вот пример из книги Fluent Python:
Выскочила ошибка, но операция все-таки завершилась. Как так? Давайте внимательнее изучим байт-код (см. комментарии рядом с важными строками):
Читайте нас в телеграмме и vk
Перевод статьи Adam Goldschmidt: Awesome Python modules you probably aren’t using (but should be)