Frog Proger 27 августа 2024

🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python

Стандартная библиотека Python – это кладезь возможностей. Мы представляем семь недооцененных модулей, которые помогут вам улучшить организацию данных, оптимизировать производительность и упростить распространение ваших программ.
🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python
Этот материал взят из нашей еженедельной email-рассылки, посвященной бэкенду. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.

Продвинутые структуры данных – collections

Словари и списки Python отлично подходят для большинства простых приложений и скриптов, но могут быть недостаточно эффективными для более сложной организации данных (и для решения соревновательных задач). Более мощные контейнеры для хранения данных в памяти предоставляет один из стандартных модулей Python – collections:

  1. Deque – двусвязная очередь; похожа на список, но обеспечивает более эффективное добавление и удаление элементов с любой стороны.
  2. Counter – подкласс словаря для подсчета элементов.
  3. ChainMap – метасловарь, предоставляющий единообразное сопоставление ключей и значений из нескольких словарей без копирования данных.
  4. OrderedDict – словарь, который сохраняет порядок пар ключ-значение, поддерживает операторы | и |= , и отлично подходит для реализации любого варианта кэша.
  5. namedtuple – функция-фабрика, создающая подкласс кортежа с именованными полями. Лучше подходит для ООП и решения многих типов олимпиадных задач, чем обычный словарь.
  6. defaultdict – словарь с предварительно заполненными значениями (всеми или некоторыми). Полезен, когда нужно, например, в процессе скрапинга предоставить значения для полей, которые могут отсутствовать на страницах.
  7. UserDict, UserList и UserString – обертки dict, list и str для дальнейшей подклассификации.
***

Если вам интересно глубже изучить Python и другие IT-темы, у Proglib Academy сейчас проходит распродажа курсов со скидкой 35%. С 28 августа по 4 сентября можно выбрать курсы по программированию, Data Science, ML и даже основам IT для непрограммистов.

Вспомогательные функции

Модуль contextlib предоставляет функции-хэлперы для работы с менеджерами контекста в вашем коде. Например, можно использовать аннотацию @contextmanager для превращения своей собственной функции в такую, которая может быть использована с помощью синтаксиса with.

Абстрактный пример использования @contextmanager
Абстрактный пример использования @contextmanager

Точные вычисления с дробями и числами с плавающей запятой

Из-за технических особенностей представления чисел с плавающей запятой, обычные вычисления с ними могут давать неожиданные результаты:

🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python

Это математически некорректно, и, более того, может стать серьезной проблемой для приложения, выполняющего точные (особенно финансовые, научные или инженерные) расчеты. Проблему решает модуль decimal, который корректирует вычисления таким образом, чтобы мы получали правильный результат (в пределах конфигурируемого уровня точности):

🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python

Для корректной работы с дробными значениями используется модуль fraction:

Дизассемблирование байт-кода
Дизассемблирование байт-кода

Интерпретатор Python реализован как стековая машина – он использует стек для хранения и манипулирования данными во время выполнения кода. Когда вы запускаете код на Python, он сначала компилируется в специфический для Python байт-код. Этот байт-код не является машинным кодом, а скорее промежуточным форматом, который выполняется виртуальной машиной Python. Для целей отладки или оптимизации производительности бывает полезно преобразовать байт-код в некое подобие псевдо-ассемблера. Стандартная установка Python поставляется с модулем dis, который позволяет выполнить это дизассемблирование – dis принимает единицы кода Python (например, функцию) и преобразует их в читаемый формат, показывающий каждую инструкцию байт-кода:

🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python

Статистические вычисления

Модуль statistics в Python предоставляет набор инструментов для простых статистических вычислений – они пригодятся в случаях, когда возможности мощных библиотек типа pandas или NumPy избыточны:

🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python

Открытие URL или локального HTML-файла

С помощью webbrowser из Python-кода можно вызвать браузер для просмотра URL:

        import webbrowser
# Открывает страницу в новой вкладке браузера
webbrowser.open_new_tab('https://proglib.io')

    

Или локальной веб-страницы:

        import os
import webbrowser
file_url = 'file://' + os.path.realpath('index.html')
# Открывает локальный файл в браузере
webbrowser.open(file_url)

    

Упаковка Python-программ в один файл

Распространение программ и скриптов на Python связано с многочисленными проблемами:

  • Пользователи, не знакомые с программированием, могут случайно повредить код, или не разберутся, как его запустить.
  • Даже если у пользователей установлен Python, у них могут отсутствовать необходимые зависимости, не будет настроено виртуальное окружение и т.д.
  • Может возникнуть конфликт версий.

Чтобы избежать этих проблем, Python предоставляет модуль zipapp, который позволяет упаковать код в единственный файл. Этот файл (с расширением .pyz) не будет исполняемым (zipapp работает как архиватор), и запустить его можно только при условии наличия Python в системе, зато все остальные проблемы он решает. Эта команда упакует содержимое директории myappdir в файл myapp.pyz и добавит шебанг для указания интерпретатора Python:

        $ python -m zipapp myappdir -p "/usr/bin/env python3" -o myapp.pyz
    

Или так:

        import zipapp
zipapp.create_archive(
    source="myappdir",
    target="myapp.pyz",
    interpreter="/usr/bin/env python3"
)

    

Есть ли у вас опыт использования других малоизвестных модулей стандартной библиотеки Python, которые вы бы порекомендовали?

***

Самоучитель по Python для начинающих

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой
  16. Регулярные выражения
  17. Основы скрапинга и парсинга
  18. Основы ООП: инкапсуляция и наследование
  19. Основы ООП – абстракция и полиморфизм
  20. Графический интерфейс на Tkinter
  21. Основы разработки игр на Pygame
  22. Основы работы с SQLite
  23. Основы веб-разработки на Flask
  24. Основы работы с NumPy

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ