🛑 Безопасное закрытие ресурсов с contextlib.suppress
Иногда нужно проигнорировать конкретные ошибки, не загромождая код try/except-блоками. contextlib.suppress делает это изящно.
🎯 Итог
contextlib.suppress помогает лаконично и безопасно игнорировать конкретные исключения, не засоряя код лишней обработкой.
Иногда нужно проигнорировать конкретные ошибки, не загромождая код try/except-блоками. contextlib.suppress делает это изящно.
🎯 Итог
contextlib.suppress помогает лаконично и безопасно игнорировать конкретные исключения, не засоряя код лишней обработкой.
🧪 Простое логирование времени выполнения кода с timeit
Нужно быстро узнать, сколько времени занимает участок кода? Не нужно писать таймеры вручную — есть timeit.
🎯 Итог
Модуль timeit — удобный способ измерить производительность кода без лишней возни с time. Особенно полезен при сравнении разных реализаций.
Нужно быстро узнать, сколько времени занимает участок кода? Не нужно писать таймеры вручную — есть timeit.
🎯 Итог
Модуль timeit — удобный способ измерить производительность кода без лишней возни с time. Особенно полезен при сравнении разных реализаций.
🧩 Используй functools.lru_cache для кэширования результатов
Если у тебя есть функция, которую вызывают с одними и теми же аргументами, а её выполнение ресурсоёмкое — можно автоматически кэшировать её результат с помощью lru_cache.
🎯 Итог
lru_cache автоматически сохраняет результаты вызовов функции и экономит ресурсы при повторных вызовах. Особенно полезно для рекурсивных и часто вызываемых функций.
Если у тебя есть функция, которую вызывают с одними и теми же аргументами, а её выполнение ресурсоёмкое — можно автоматически кэшировать её результат с помощью lru_cache.
🎯 Итог
lru_cache автоматически сохраняет результаты вызовов функции и экономит ресурсы при повторных вызовах. Особенно полезно для рекурсивных и часто вызываемых функций.
Если у вас есть смартфон или ПК, вы обязаны знать об этом: всю рекламу на смартфоне можно отключить. Ни на сайтах, ни в приложениях ее не будет.
Вся инфа о том, как это сделать и другая полезная информация о кибер безопасности собрана в Технолавке. Это номер один канал про приватность, слежку в Интернете и способы защититься от нее. Также внутри: секретные фишки соцсетей, малоизвестные сервисы и полезные лайфхаки.
Например, вы знали, что можно в два клика защититься от спама и не выдать свой номер рандомному гику? А с Технолавкой сможете не только это.
Вся инфа о том, как это сделать и другая полезная информация о кибер безопасности собрана в Технолавке. Это номер один канал про приватность, слежку в Интернете и способы защититься от нее. Также внутри: секретные фишки соцсетей, малоизвестные сервисы и полезные лайфхаки.
Например, вы знали, что можно в два клика защититься от спама и не выдать свой номер рандомному гику? А с Технолавкой сможете не только это.
🕵️ Удобный способ подавить ошибки через contextlib.suppress
Иногда нужно игнорировать определённые исключения, не захламляя код try-except. Для этого идеально подходит contextlib.suppress.
🎯 Итог
suppress делает код чище, когда нужно спокойно обойтись без конкретных исключений. Особенно полезно в служебных операциях типа удаления или проверки.
Иногда нужно игнорировать определённые исключения, не захламляя код try-except. Для этого идеально подходит contextlib.suppress.
🎯 Итог
suppress делает код чище, когда нужно спокойно обойтись без конкретных исключений. Особенно полезно в служебных операциях типа удаления или проверки.
📌 Быстрое сравнение объектов через dataclasses
Если тебе нужно сравнивать экземпляры классов по значениям, а не по идентификаторам, используй @dataclass — это избавит от ручной реализации eq.
🎯 Итог
@dataclass не только сокращает шаблонный код, но и позволяет автоматически сравнивать объекты по значению их полей — удобно и читаемо.
Если тебе нужно сравнивать экземпляры классов по значениям, а не по идентификаторам, используй @dataclass — это избавит от ручной реализации eq.
🎯 Итог
@dataclass не только сокращает шаблонный код, но и позволяет автоматически сравнивать объекты по значению их полей — удобно и читаемо.
🧪 Проверка типов во время разработки с typing.assert_type
Иногда полезно явно указать ожидаемый тип переменной — особенно при сложных аннотациях или когда IDE не даёт точной подсказки. Python 3.11+ предоставляет утилиту typing.assert_type для таких целей.
Во время выполнения assert_type не делает ничего — он нужен только для анализа типизации инструментами, как mypy или Pyright.
🎯 Итог
assert_type помогает быть уверенным, что типы совпадают с ожиданиями, и делает код более безопасным без влияния на производительность.
Иногда полезно явно указать ожидаемый тип переменной — особенно при сложных аннотациях или когда IDE не даёт точной подсказки. Python 3.11+ предоставляет утилиту typing.assert_type для таких целей.
Во время выполнения assert_type не делает ничего — он нужен только для анализа типизации инструментами, как mypy или Pyright.
🎯 Итог
assert_type помогает быть уверенным, что типы совпадают с ожиданиями, и делает код более безопасным без влияния на производительность.
🧵 Ускорение многозадачности с concurrent.futures.ThreadPoolExecutor
Когда тебе нужно выполнить несколько I/O-зависимых задач (например, запросы к API или чтение файлов), но ты не хочешь возиться с asyncio, можно использовать ThreadPoolExecutor — просто и эффективно.
🎯 Итог
ThreadPoolExecutor — мощный способ ускорить I/O-операции с минимальными усилиями. Особенно удобен, если не хочется переписывать проект под asyncio.
Когда тебе нужно выполнить несколько I/O-зависимых задач (например, запросы к API или чтение файлов), но ты не хочешь возиться с asyncio, можно использовать ThreadPoolExecutor — просто и эффективно.
🎯 Итог
ThreadPoolExecutor — мощный способ ускорить I/O-операции с минимальными усилиями. Особенно удобен, если не хочется переписывать проект под asyncio.
🧼 Удаление дубликатов из вложенных списков
Иногда нужно удалить дубликаты из списка списков — но set тут не работает напрямую, ведь списки — неизменяемые. Есть простое решение!
🎯 Итог
Для удаления дубликатов из списка списков — конвертируй во tuple, используй set, потом верни всё обратно. Быстро и без лишних циклов.
Иногда нужно удалить дубликаты из списка списков — но set тут не работает напрямую, ведь списки — неизменяемые. Есть простое решение!
🎯 Итог
Для удаления дубликатов из списка списков — конвертируй во tuple, используй set, потом верни всё обратно. Быстро и без лишних циклов.
🧠 Проверка типов во время разработки — mypy
Пайтон — динамический язык, но ты можешь использовать статическую проверку типов с помощью mypy для улавливания ошибок до запуска кода.
🎯 Итог
mypy помогает ловить ошибки типов на раннем этапе и делает твой код надежнее. Особенно полезен в больших проектах с командами.
Пайтон — динамический язык, но ты можешь использовать статическую проверку типов с помощью mypy для улавливания ошибок до запуска кода.
🎯 Итог
mypy помогает ловить ошибки типов на раннем этапе и делает твой код надежнее. Особенно полезен в больших проектах с командами.
🪄 Ускорение сериализации с orjson
Обычный json модуль в Python медленный. Если тебе нужно быстро сериализовать/десериализовать данные — используй orjson, он в разы быстрее и поддерживает datetime из коробки.
🎯 Итог
orjson — отличный выбор, если тебе важна производительность при работе с JSON. Он быстрее стандартного модуля и проще в использовании.
Обычный json модуль в Python медленный. Если тебе нужно быстро сериализовать/десериализовать данные — используй orjson, он в разы быстрее и поддерживает datetime из коробки.
🎯 Итог
orjson — отличный выбор, если тебе важна производительность при работе с JSON. Он быстрее стандартного модуля и проще в использовании.
Объединение списка строк в одну строку
Метод
Плюсы: ✔ Быстрее и эффективнее, чем перебор в цикле ✔ Гибкость: можно выбрать любой разделитель (например,
Осторожно: ❌ Все элементы списка должны быть строками, иначе будет ошибка.
Метод
.join()
объединяет элементы списка в одну строку, используя заданный разделитель (в примере — пробел " "
).Плюсы: ✔ Быстрее и эффективнее, чем перебор в цикле ✔ Гибкость: можно выбрать любой разделитель (например,
",".join()
для CSV)Осторожно: ❌ Все элементы списка должны быть строками, иначе будет ошибка.
🧼 Безопасное удаление ключа из словаря
Обычно при удалении ключа из словаря с del можно случайно получить KeyError, если ключа нет. А вот dict.pop() с дефолтным значением — безопаснее и удобнее!
🎯 Итог
Используй dict.pop(key, default) — безопасный способ удалить ключ и получить значение, если оно нужно. Уберегаешься от KeyError и пишешь устойчивый код.
Обычно при удалении ключа из словаря с del можно случайно получить KeyError, если ключа нет. А вот dict.pop() с дефолтным значением — безопаснее и удобнее!
🎯 Итог
Используй dict.pop(key, default) — безопасный способ удалить ключ и получить значение, если оно нужно. Уберегаешься от KeyError и пишешь устойчивый код.
🛑 Прерывание цикла for с else
Мало кто знает, но for и while в Python могут иметь else. Этот else сработает только если цикл не был прерван через break. Удобно, когда нужно узнать, завершился ли цикл «естественно».
🎯 Итог
Конструкция for/else помогает элегантно отличить «успешный» проход по циклу от прерывания. Полезно при поиске, проверках и валидации!
Мало кто знает, но for и while в Python могут иметь else. Этот else сработает только если цикл не был прерван через break. Удобно, когда нужно узнать, завершился ли цикл «естественно».
🎯 Итог
Конструкция for/else помогает элегантно отличить «успешный» проход по циклу от прерывания. Полезно при поиске, проверках и валидации!
🐍 Как элегантно "перевернуть" словарь
Иногда нужно поменять местами ключи и значения в словаре. Это можно сделать в одну строчку с помощью генератора словаря.
🎯 Итог
Инвертирование словаря — это просто и читаемо с генератором. Но помни: значения должны быть уникальны и хэшируемы, чтобы не потерять данные!
Иногда нужно поменять местами ключи и значения в словаре. Это можно сделать в одну строчку с помощью генератора словаря.
🎯 Итог
Инвертирование словаря — это просто и читаемо с генератором. Но помни: значения должны быть уникальны и хэшируемы, чтобы не потерять данные!