Python School
81.8K subscribers
2.42K photos
7 videos
563 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
Download Telegram
⏱️ Как замерить время выполнения кода элегантно

Иногда нужно узнать, сколько времени занял блок кода — для отладки, оптимизации или просто интереса. Вместо громоздких решений можно использовать контекстный менеджер.

🎯 Итог
Контекстный менеджер timeit позволяет быстро замерять производительность без лишнего шума. Особенно полезен при профилировании отдельных участков кода.
🧩 Как элегантно объединять словари с приоритетом значений

Часто нужно объединить два словаря, где значения из второго имеют приоритет. Это можно сделать просто и читаемо.

🎯 Итог
Синтаксис {**dict1, **dict2} объединяет словари, давая приоритет второму. Удобен для настройки конфигураций, параметров и всего, что связано с override'ами.
Быстрая проверка уникальности элементов в списке

Иногда нужно понять, все ли элементы в списке уникальны. Можно обойтись без циклов и лишней логики.

🎯 Итог
Преобразование списка во множество — быстрый способ проверить уникальность: set автоматически убирает дубликаты. Особенно полезно при валидации данных.
Используйте функцию enumerate для перебора элементов списка и их индексов

enumerate - это встроенная функция, которая принимает список и возвращает объект, который можно использовать в цикле for для перебора элементов списка и их соответствующих индексов.
Ограничение времени выполнения кода с signal

Когда нужно завершать долгие операции (например, при парсинге или работе с API), полезно уметь ставить таймаут на блок кода.

🎯 Итог
Модуль signal позволяет элегантно ограничивать время выполнения операций. Особенно полезен при работе с нестабильными внешними источниками или написании защищённых CLI-утилит. Работает только в UNIX-системах.
🧊 Глубокая заморозка объектов с types.MappingProxyType

Иногда нужно создать словарь, который нельзя изменить — например, для констант или конфигурации. Вместо копирования или заморозки вручную, можно использовать MappingProxyType.

🎯 Итог
MappingProxyType создаёт читаемую, но неизменяемую обёртку над словарём — отличный способ защитить данные от случайного изменения, особенно в конфигурациях и API-интерфейсах.
⚙️ Быстрое измерение времени выполнения кода с timeit

Иногда нужно узнать, какой из вариантов реализации работает быстрее. Модуль timeit поможет провести чистое и честное измерение без внешнего шума.

🎯 Итог
timeit — отличный способ понять, какой участок кода быстрее работает на практике. Особенно полезен при оптимизации функций или выборе между несколькими подходами.
🧠 Кэширование с functools.lru_cache

Если у вас есть функция, результат которой зависит только от входных параметров и вызывается часто с одними и теми же аргументами — её можно ускорить с помощью мемоизации.

Без кэширования fibonacci(100) был бы крайне медленным из-за экспоненциальной сложности. С lru_cache результат каждого вызова сохраняется и переиспользуется.

🎯 Итог
@lru_cache — простой способ ускорить рекурсивные (и не только) функции, избежав повторных вычислений.
⏱️ Замер времени выполнения кода с timeit

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

timeit учитывает накладные расходы, прогрев интерпретатора и выполняет код в изолированной среде, что делает его отличным инструментом для микробенчмарков.

🎯 Итог
timeit — отличный способ сравнивать производительность разных решений и выбирать самое быстрое.
✉️ Распаковка аргументов с * и ** — элегантная передача параметров

Иногда нужно передать переменное количество аргументов в функцию или вызвать функцию с уже готовыми аргументами в виде кортежа или словаря. Python позволяет делать это красиво с помощью *args и **kwargs.

Это особенно удобно, если вы оборачиваете функции, строите декораторы или работаете с конфигами.

🎯 Итог
Использование * и ** позволяет гибко управлять аргументами и упрощает передачу данных в функции — лаконично и читаемо.
⏱️ Тайминг кода без сторонних библиотек

Нужно быстро узнать, сколько времени занимает выполнение участка кода? Воспользуйтесь встроенным модулем time.

time.perf_counter() предоставляет наиболее точные замеры времени исполнения — идеально для бенчмаркинга.

🎯 Итог
С помощью time.perf_counter() можно легко измерять производительность кода без внешних зависимостей.
🧠 Получение имени переменной как строки

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

Функция var_name смотрит в локальные переменные вызывающей функции и ищет переменную, значение которой совпадает с переданным объектом.

🎯 Итог
Этот способ позволяет получить имя переменной во время выполнения, что может быть полезно при отладке, логировании или автогенерации сообщений.
🚀 Быстрое сравнение версий как в pip

Когда нужно сравнить версии вроде '1.2.10' и '1.2.3', строковое сравнение не работает как надо. Но Python умеет это элегантно через packaging.version.

Библиотека packaging знает, как правильно сравнивать версии, в том числе с alpha, beta, rc и прочими дополнениями. Она используется, например, в pip.

🎯 Итог
packaging.version.parse — надёжный способ сравнивать версии, как это делает Python Package Index. Удобно для проверок в CLI, апдейтах и условиях совместимости.
🧊 Словарь с "молчаливыми" значениями — defaultdict

Когда работаешь со словарём, часто нужно сначала проверять, есть ли ключ. С defaultdict от collections это делается автоматически.

🎯 Итог
defaultdict избавляет от лишних проверок и упрощает код, особенно когда нужно агрегировать или группировать данные.
🧪 Проверка аргументов функций — assert как мини-валидация

Иногда нужно быстро проверить корректность аргументов функции. Можно использовать assert для встроенной валидации прямо в начале.

🎯 Итог
assert — быстрый способ «подстелить соломку» и отлавливать очевидные ошибки ещё до выполнения основного тела функции. Особенно полезно в прототипах и тестах.
🧵 Ускорение кода с помощью functools.cache

Когда функция вызывается часто с одними и теми же аргументами (например, при рекурсии), можно использовать кэширование результатов с помощью декоратора @cache.

🎯 Итог
@cache (или @lru_cache) позволяет многократно ускорить повторяющиеся вычисления без изменения логики — просто добавь декоратор.
🛑 Безопасное закрытие ресурсов с contextlib.suppress

Иногда нужно проигнорировать конкретные ошибки, не загромождая код try/except-блоками. contextlib.suppress делает это изящно.

🎯 Итог
contextlib.suppress помогает лаконично и безопасно игнорировать конкретные исключения, не засоряя код лишней обработкой.
🧪 Простое логирование времени выполнения кода с timeit

Нужно быстро узнать, сколько времени занимает участок кода? Не нужно писать таймеры вручную — есть timeit.

🎯 Итог
Модуль timeit — удобный способ измерить производительность кода без лишней возни с time. Особенно полезен при сравнении разных реализаций.
🧩 Используй functools.lru_cache для кэширования результатов

Если у тебя есть функция, которую вызывают с одними и теми же аргументами, а её выполнение ресурсоёмкое — можно автоматически кэшировать её результат с помощью lru_cache.

🎯 Итог
lru_cache автоматически сохраняет результаты вызовов функции и экономит ресурсы при повторных вызовах. Особенно полезно для рекурсивных и часто вызываемых функций.
Распаковка элементов с помощью `*_

Если вам нужно проигнорировать некоторые значения при распаковке, используйте *_

Отлично подходит для игнорирования ненужных данных.
Если у вас есть смартфон или ПК, вы обязаны знать об этом: всю рекламу на смартфоне можно отключить. Ни на сайтах, ни в приложениях ее не будет.

Вся инфа о том, как это сделать и другая полезная информация о кибер безопасности собрана в Технолавке. Это номер один канал про приватность, слежку в Интернете и способы защититься от нее. Также внутри: секретные фишки соцсетей, малоизвестные сервисы и полезные лайфхаки.

Например, вы знали, что можно в два клика защититься от спама и не выдать свой номер рандомному гику? А с Технолавкой сможете не только это.