Продвинутые структуры данных – collections
Словари и списки Python отлично подходят для большинства простых приложений и скриптов, но могут быть недостаточно эффективными для более сложной организации данных (и для решения соревновательных задач). Более мощные контейнеры для хранения данных в памяти предоставляет один из стандартных модулей Python – collections:
- Deque – двусвязная очередь; похожа на список, но обеспечивает более эффективное добавление и удаление элементов с любой стороны.
- Counter – подкласс словаря для подсчета элементов.
- ChainMap – метасловарь, предоставляющий единообразное сопоставление ключей и значений из нескольких словарей без копирования данных.
- OrderedDict – словарь, который сохраняет порядок пар ключ-значение, поддерживает операторы
|
и|=
, и отлично подходит для реализации любого варианта кэша. - namedtuple – функция-фабрика, создающая подкласс кортежа с именованными полями. Лучше подходит для ООП и решения многих типов олимпиадных задач, чем обычный словарь.
- defaultdict – словарь с предварительно заполненными значениями (всеми или некоторыми). Полезен, когда нужно, например, в процессе скрапинга предоставить значения для полей, которые могут отсутствовать на страницах.
- UserDict, UserList и UserString – обертки dict, list и str для дальнейшей подклассификации.
Если вам интересно глубже изучить Python и другие IT-темы, у Proglib Academy сейчас проходит распродажа курсов со скидкой 35%. С 28 августа по 4 сентября можно выбрать курсы по программированию, Data Science, ML и даже основам IT для непрограммистов.
- Для тех, кто интересуется данными: «Онлайн-курс по математике для Data Science» и «Базовые модели ML и приложения»
- Для программистов всех уровней: «Алгоритмы и структуры данных» и «Основы программирования на Python»
- Для новичков в IT: «Основы IT для непрограммистов»
- Для веб-разработчиков: «Frontend Basic: принцип работы современного веба с нуля до первого интернет-магазина»
Вспомогательные функции
Модуль contextlib предоставляет функции-хэлперы для работы с менеджерами контекста в вашем коде. Например, можно использовать аннотацию @contextmanager для превращения своей собственной функции в такую, которая может быть использована с помощью синтаксиса with.
Точные вычисления с дробями и числами с плавающей запятой
Из-за технических особенностей представления чисел с плавающей запятой, обычные вычисления с ними могут давать неожиданные результаты:
Это математически некорректно, и, более того, может стать серьезной проблемой для приложения, выполняющего точные (особенно финансовые, научные или инженерные) расчеты. Проблему решает модуль decimal, который корректирует вычисления таким образом, чтобы мы получали правильный результат (в пределах конфигурируемого уровня точности):
Для корректной работы с дробными значениями используется модуль fraction:
Интерпретатор Python реализован как стековая машина – он использует стек для хранения и манипулирования данными во время выполнения кода. Когда вы запускаете код на Python, он сначала компилируется в специфический для Python байт-код. Этот байт-код не является машинным кодом, а скорее промежуточным форматом, который выполняется виртуальной машиной Python. Для целей отладки или оптимизации производительности бывает полезно преобразовать байт-код в некое подобие псевдо-ассемблера. Стандартная установка Python поставляется с модулем dis, который позволяет выполнить это дизассемблирование – dis принимает единицы кода Python (например, функцию) и преобразует их в читаемый формат, показывающий каждую инструкцию байт-кода:
Статистические вычисления
Модуль statistics в Python предоставляет набор инструментов для простых статистических вычислений – они пригодятся в случаях, когда возможности мощных библиотек типа pandas или NumPy избыточны:
Открытие URL или локального HTML-файла
С помощью webbrowser из Python-кода можно вызвать браузер для просмотра URL:
Или локальной веб-страницы:
Упаковка Python-программ в один файл
Распространение программ и скриптов на Python связано с многочисленными проблемами:
- Пользователи, не знакомые с программированием, могут случайно повредить код, или не разберутся, как его запустить.
- Даже если у пользователей установлен Python, у них могут отсутствовать необходимые зависимости, не будет настроено виртуальное окружение и т.д.
- Может возникнуть конфликт версий.
Чтобы избежать этих проблем, Python предоставляет модуль zipapp, который позволяет упаковать код в единственный файл. Этот файл (с расширением .pyz) не будет исполняемым (zipapp работает как архиватор), и запустить его можно только при условии наличия Python в системе, зато все остальные проблемы он решает. Эта команда упакует содержимое директории myappdir в файл myapp.pyz и добавит шебанг для указания интерпретатора Python:
Или так:
Есть ли у вас опыт использования других малоизвестных модулей стандартной библиотеки Python, которые вы бы порекомендовали?
Самоучитель по Python для начинающих
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
- Основы разработки игр на Pygame
- Основы работы с SQLite
- Основы веб-разработки на Flask
- Основы работы с NumPy
Комментарии