⚙️ Использование contextlib.suppress для игнорирования ошибок
Иногда нужно выполнить код, который может упасть, но ошибка при этом не критична.
Вместо громоздкого try/except, можно изящно подавить исключения!
🎯 Итог
Используй contextlib.suppress для безопасного выполнения кода, где ошибка не требует обработки. Это делает код компактнее и чище.
Иногда нужно выполнить код, который может упасть, но ошибка при этом не критична.
Вместо громоздкого try/except, можно изящно подавить исключения!
🎯 Итог
Используй contextlib.suppress для безопасного выполнения кода, где ошибка не требует обработки. Это делает код компактнее и чище.
🧵 Параллельное выполнение задач с ThreadPoolExecutor
Если нужно ускорить выполнение нескольких независимых операций (например, сетевых запросов или чтения файлов) — можно использовать потоки из concurrent.futures.
🎯 Итог
ThreadPoolExecutor позволяет легко запускать несколько задач одновременно, экономя время на операциях ввода-вывода.
Если нужно ускорить выполнение нескольких независимых операций (например, сетевых запросов или чтения файлов) — можно использовать потоки из concurrent.futures.
🎯 Итог
ThreadPoolExecutor позволяет легко запускать несколько задач одновременно, экономя время на операциях ввода-вывода.
🕵️♂️ Измеряем время выполнения кода одной строкой
Иногда нужно быстро понять, сколько времени занимает выполнение участка кода. Можно сделать это без дополнительных библиотек.
🎯 Итог
Используйте time.perf_counter() для точного измерения времени выполнения кода — он лучше подходит для микробенчмарков, чем time.time().
Иногда нужно быстро понять, сколько времени занимает выполнение участка кода. Можно сделать это без дополнительных библиотек.
🎯 Итог
Используйте time.perf_counter() для точного измерения времени выполнения кода — он лучше подходит для микробенчмарков, чем time.time().
🔄 Меняем местами значения без временной переменной
Во многих языках для обмена значениями приходится использовать временную переменную, что выглядит громоздко. В Python это делается в одну строку благодаря распаковке кортежей.
🎯 Итог
Python позволяет обменивать значения напрямую через множественное присваивание — без временных переменных и лишнего кода. Лаконично и понятно!
Во многих языках для обмена значениями приходится использовать временную переменную, что выглядит громоздко. В Python это делается в одну строку благодаря распаковке кортежей.
🎯 Итог
Python позволяет обменивать значения напрямую через множественное присваивание — без временных переменных и лишнего кода. Лаконично и понятно!
✅ Проверяем запуск скрипта напрямую: if __name__ == "__main__"
Иногда нужно, чтобы часть кода выполнялась только при прямом запуске файла, а не при его импорте в другой модуль. Новички часто удивляются, почему функции выполняются «сами». Python решает это с помощью специальной проверки.
🎯 Итог
Используйте if name == "__main__" чтобы управлять тем, выполняется ли код при прямом запуске или же файл лишь импортируется как модуль. Это делает программы чище и удобнее для повторного использования.
Иногда нужно, чтобы часть кода выполнялась только при прямом запуске файла, а не при его импорте в другой модуль. Новички часто удивляются, почему функции выполняются «сами». Python решает это с помощью специальной проверки.
🎯 Итог
Используйте if name == "__main__" чтобы управлять тем, выполняется ли код при прямом запуске или же файл лишь импортируется как модуль. Это делает программы чище и удобнее для повторного использования.
Примите участие в турнире для школьников «Решись!»
Турнир «Решись!» — онлайн-состязание для школьников 10—11-х классов по четырем направлениям: разработке, искусственному интеллекту, бизнес-аналитике, а также дизайну.
«Решись!» для школьников — это возможность:
— получить грант на обучение в Центральном университете до 100% и другие призы;
— пополнить портфолио;
— проверить знания в ИИ, разработке, дизайне и бизнес-аналитике;
— найти новых знакомых в чате турнира.
Для участия вы можете выбрать как одно направление, так и все четыре — решать вам.
🕒Регистрация продлится до 12 ноября, 16:00 мск, как и отборочный тур.
👉Подробности о турнире и регистрация на сайте
Турнир «Решись!» — онлайн-состязание для школьников 10—11-х классов по четырем направлениям: разработке, искусственному интеллекту, бизнес-аналитике, а также дизайну.
«Решись!» для школьников — это возможность:
— получить грант на обучение в Центральном университете до 100% и другие призы;
— пополнить портфолио;
— проверить знания в ИИ, разработке, дизайне и бизнес-аналитике;
— найти новых знакомых в чате турнира.
Для участия вы можете выбрать как одно направление, так и все четыре — решать вам.
🕒Регистрация продлится до 12 ноября, 16:00 мск, как и отборочный тур.
👉Подробности о турнире и регистрация на сайте
Безопасные параметры в SQL через SQLAlchemy
Новички часто формируют SQL строкой, подставляя значения через f-string → это приводит к SQL-инъекциям. Используйте bind-параметры (:param) — SQLAlchemy сам экранирует значения, защищая запрос.
Не формируйте SQL вручную через f-string.
Используйте :param + словарь → и сразу получаете безопасность и читаемость запроса.
Новички часто формируют SQL строкой, подставляя значения через f-string → это приводит к SQL-инъекциям. Используйте bind-параметры (:param) — SQLAlchemy сам экранирует значения, защищая запрос.
Не формируйте SQL вручную через f-string.
Используйте :param + словарь → и сразу получаете безопасность и читаемость запроса.
Автоматическое создание таблиц из моделей SQLAlchemy
Иногда нужно быстро поднять базу данных на основе ORM-моделей, не создавая миграции вручную.
С помощью Base.metadata.create_all() можно автоматически создать все таблицы, определённые в ваших моделях, прямо в базе данных. Это особенно удобно для тестов или прототипов.
🎯 Итог:
Base.metadata.create_all() позволяет мгновенно создать все таблицы из моделей без Alembic — идеально для тестов, демо и начальной настройки проекта.
Иногда нужно быстро поднять базу данных на основе ORM-моделей, не создавая миграции вручную.
С помощью Base.metadata.create_all() можно автоматически создать все таблицы, определённые в ваших моделях, прямо в базе данных. Это особенно удобно для тестов или прототипов.
🎯 Итог:
Base.metadata.create_all() позволяет мгновенно создать все таблицы из моделей без Alembic — идеально для тестов, демо и начальной настройки проекта.
Быстрое измерение времени выполнения куска кода
Иногда нужно понять, где в проекте просадка по производительности, но тянуть профилировщик — слишком долго. В таких случаях помогает простой таймер через time.perf_counter().
Он даёт высокоточную измерительную шкалу и идеально подходит для быстрого анализа производительности отдельных функций.
🎯 Итог:
time.perf_counter() — самый простой способ быстро понять, где код тормозит, без сторонних библиотек и сложных инструментов.
Иногда нужно понять, где в проекте просадка по производительности, но тянуть профилировщик — слишком долго. В таких случаях помогает простой таймер через time.perf_counter().
Он даёт высокоточную измерительную шкалу и идеально подходит для быстрого анализа производительности отдельных функций.
🎯 Итог:
time.perf_counter() — самый простой способ быстро понять, где код тормозит, без сторонних библиотек и сложных инструментов.
Мессенджер MAX теперь полностью совместим с ОС Аврора отечественной разработки. Это отличная новость для тех, кому не обойтись без смартфонов и планшетов с Авророй на своей работе — сотрудников РЖД, Аэрофлота, Интер РАО, Ростелеком и Почты России. Речь о сотнях тысяч пользователей.
Можно смело констатировать: MAX стал ещё доступнее. Хотя нельзя сказать, что национальный мессенджер испытывает дефицит новых пользователей. В ноябре общее число зарегистрированных номеров в MAX превысило 55 млн.
Можно смело констатировать: MAX стал ещё доступнее. Хотя нельзя сказать, что национальный мессенджер испытывает дефицит новых пользователей. В ноябре общее число зарегистрированных номеров в MAX превысило 55 млн.
Удобный вывод SQL-запросов прямо в консоль с форматированием
Когда вы работаете с SQLAlchemy, отладка запросов иногда превращается в хаос — SQL выводится без форматирования, читать трудно, ошибки искать ещё труднее. Python позволяет быстро превратить любой запрос в читабельный SQL с подставленными параметрами.
🎯 Итог:
Этот приём позволяет видеть SQL-запросы в чистом виде, как в DBeaver, и экономит массу времени при отладке и оптимизации.
Когда вы работаете с SQLAlchemy, отладка запросов иногда превращается в хаос — SQL выводится без форматирования, читать трудно, ошибки искать ещё труднее. Python позволяет быстро превратить любой запрос в читабельный SQL с подставленными параметрами.
🎯 Итог:
Этот приём позволяет видеть SQL-запросы в чистом виде, как в DBeaver, и экономит массу времени при отладке и оптимизации.
Быстрое измерение времени выполнения кода без time и декораторов
Иногда нужно прикинуть, сколько реально занимает выполнение фрагмента кода — но не хочется подключать сложные профилировщики. Python даёт простой и элегантный способ измерить время прямо “на лету” с помощью time.perf_counter().
🎯 Итог:
Этот метод позволяет замерять время выполнения любых операций в одном месте, без декораторов и внешних библиотек, и идеально подходит для быстрой диагностики производительности.
Иногда нужно прикинуть, сколько реально занимает выполнение фрагмента кода — но не хочется подключать сложные профилировщики. Python даёт простой и элегантный способ измерить время прямо “на лету” с помощью time.perf_counter().
🎯 Итог:
Этот метод позволяет замерять время выполнения любых операций в одном месте, без декораторов и внешних библиотек, и идеально подходит для быстрой диагностики производительности.
Как красиво логировать объекты без ручного форматирования
Когда нужно записать в лог сложный объект (например, dict с вложенными структурами), обычный print() делает кашу. А logging без форматирования выглядит громоздко. Есть быстрый способ — использовать pprint прямо внутри логирования.
Хотите логировать сложные структуры красиво и читаемо, но не хотите вручную форматировать JSON или писать многострочные print(). Используйте pprint.pformat() — он превращает объект в красиво отформатированную строку, которая идеально ложится в лог.
Когда нужно записать в лог сложный объект (например, dict с вложенными структурами), обычный print() делает кашу. А logging без форматирования выглядит громоздко. Есть быстрый способ — использовать pprint прямо внутри логирования.
Хотите логировать сложные структуры красиво и читаемо, но не хотите вручную форматировать JSON или писать многострочные print(). Используйте pprint.pformat() — он превращает объект в красиво отформатированную строку, которая идеально ложится в лог.
Получаем значения из словаря без KeyError
Новички часто сталкиваются с ошибкой KeyError, когда ключа в словаре нет. Вместо проверки через if можно использовать встроенный и безопасный способ.
Используй метод dict.get() — он возвращает значение по ключу или None (или значение по умолчанию), если ключ отсутствует.
🎯 Итог:
dict.get() делает код короче, безопаснее и избавляет от лишних проверок на существование ключей.
Новички часто сталкиваются с ошибкой KeyError, когда ключа в словаре нет. Вместо проверки через if можно использовать встроенный и безопасный способ.
Используй метод dict.get() — он возвращает значение по ключу или None (или значение по умолчанию), если ключ отсутствует.
🎯 Итог:
dict.get() делает код короче, безопаснее и избавляет от лишних проверок на существование ключей.
Аккуратно игнорируем ошибки без try/except
Иногда ошибка — это нормальное поведение программы. Например, файл может не существовать, ключ в кеше — отсутствовать, а удаление временного ресурса — падать. Новички обычно оборачивают такие места в громоздкий try/except, из-за чего код становится шумным и хуже читается.
В Python есть элегантное решение — contextlib.suppress. Он позволяет явно указать, какие исключения нужно проигнорировать, не скрывая логику и не перехватывая всё подряд.
🎯 Итог:
contextlib.suppress делает код чище и честнее: вы явно показываете, какую ошибку считаете допустимой, без лишнего try/except и хака с pass.
Иногда ошибка — это нормальное поведение программы. Например, файл может не существовать, ключ в кеше — отсутствовать, а удаление временного ресурса — падать. Новички обычно оборачивают такие места в громоздкий try/except, из-за чего код становится шумным и хуже читается.
В Python есть элегантное решение — contextlib.suppress. Он позволяет явно указать, какие исключения нужно проигнорировать, не скрывая логику и не перехватывая всё подряд.
🎯 Итог:
contextlib.suppress делает код чище и честнее: вы явно показываете, какую ошибку считаете допустимой, без лишнего try/except и хака с pass.