7 фишек Python для лучшего обращения с памятью
Подобрали фишек Python, чтобы использовать язык по полной и разумнее обращаться с CPU.
1К открытий6К показов
В Python никогда не бывает избытка полезных приемов. Чем больше вы таких изучите, тем выше вероятность, что сможете быстро справиться с любыми трудностями на практике. В этой статье я поделюсь хитростями, которые могут пригодиться как новичкам, так и опытным разработчикам.
ВРЕЗКА. Мы собрали уже много полезных приемов (часть 1, часть 2, часть 3), по-прежнему открываем для себя новые, и с удовольствием делимся с вами еще одной подборкой на тему эффективного расхода памяти.
Режим разработчика
В нем интерпретатор выдаст больше полезных предупреждений:
- незакрытые файлы;
- неожиданные корутины (асинхронные функции);
- неизвестная кодировка для str.encode (по умолчанию для пустых строк флажок не установлен);
- проблемы с распределением памяти.
Настройку можно активировать с помощью аргумента -X. Запускаем скрипт с помощью командной строки:
Python откроется в командной строке в интерактивном режиме:
Больше про devmode в документации.
Измененная копия
В Python 3.13 добавлена функция copy.replace(), которая позволяет создавать модифицированную копию неизменяемого объекта вроде кортежей, экземпляров datetime, и прочего (документация):
Группы исключений с except*
PEP 654 добавляет ExceptionGroupи новый синтаксис для обращения с ней — except*:
Программа ловит все исключения и отображаетт их в таком каскадном трейсбеке:
setdefault() для заполнения словаря
Случается, что нам нужно установить дефолтное значения для различных ключей в словаре. Например, это пригодится при отслеживании числа слов в абзаце. Базовое решение выглядит так:
Лаконичный и более эффективный с точки зрения памяти способ — setdefault():
Несколько паттернов для regex
Вы наверняка знакомы со спецсимволом ‘pipe’ — |, который позволяет сопоставлять объекты. К примеру, в словах «Супермэн» и «суперсила» есть общая приставка «супер». Значит, эту часть можно вынести за скобки, а внутри указать оставшиеся — «мэн», «сила»:
Модуль re найдет запрошенное два раза:
isalnum() для проверки пароля на качество
Если необходимо проверить креды (чтобы состояли из букв и цифр), можно использовать встроенную функцию isalnum():
Генераторы для экономии памяти
Отрабатывают эффективнее вместо самописных итераторов и вызываются с помощью специального синтаксиса — круглых скобок и конструкции i for i in range(10000):
В первом случае список весит 87 тыс. байт, во втором — всего 128 байт:
Заключение
Некоторые приемы в документации языка программирования могут быть не очень понятными до тех пор, пока вы не попробуете их запустить. Забывать код нормально, достаточно просто добавить статью в закладки, чтобы вернуться к описанным трюкам в будущем.
1К открытий6К показов