✨ Получаем размер файла в байтах
Иногда нужно узнать, сколько весит файл — например, перед загрузкой или отправкой по сети. Новички могут не знать, как это сделать быстро и просто.
Python предоставляет удобный способ с помощью функции os.path.getsize().
🎯 Итог
Используйте os.path.getsize(path), чтобы легко получить размер файла в байтах. Удобно для логирования, проверки ограничений и статистики.
Иногда нужно узнать, сколько весит файл — например, перед загрузкой или отправкой по сети. Новички могут не знать, как это сделать быстро и просто.
Python предоставляет удобный способ с помощью функции os.path.getsize().
🎯 Итог
Используйте os.path.getsize(path), чтобы легко получить размер файла в байтах. Удобно для логирования, проверки ограничений и статистики.
Получаем количество строк без загрузки всех данных
Новички часто загружают все строки из таблицы и считают их вручную, что может быть медленно и неэффективно. Гораздо лучше использовать встроенные возможности SQL для подсчёта строк прямо на стороне базы данных.
🎯 Итог
Вместо перебора всех записей в Python используй SQL-запрос COUNT(*). Это быстрый и надёжный способ узнать количество строк, особенно на больших таблицах.
Новички часто загружают все строки из таблицы и считают их вручную, что может быть медленно и неэффективно. Гораздо лучше использовать встроенные возможности SQL для подсчёта строк прямо на стороне базы данных.
🎯 Итог
Вместо перебора всех записей в Python используй SQL-запрос COUNT(*). Это быстрый и надёжный способ узнать количество строк, особенно на больших таблицах.
Используем контекстный менеджер для безопасной работы с БД
Многие новички забывают закрывать соединения с базой данных, что может привести к утечкам ресурсов и блокировкам. Контекстный менеджер (with) упрощает работу с базой и автоматически закрывает соединение даже при ошибках.
🎯 Итог
Используй with при работе с базой данных — это гарантирует автоматическое закрытие соединения и делает код надёжнее и чище.
Многие новички забывают закрывать соединения с базой данных, что может привести к утечкам ресурсов и блокировкам. Контекстный менеджер (with) упрощает работу с базой и автоматически закрывает соединение даже при ошибках.
🎯 Итог
Используй with при работе с базой данных — это гарантирует автоматическое закрытие соединения и делает код надёжнее и чище.
🧠 Переопределение стандартного поведения функций через декоратор
Иногда хочется обернуть функцию, чтобы автоматически логировать её вызов или измерять время исполнения. Это удобно делать через декоратор.
🎯 Итог
Декораторы позволяют добавлять поведение к функциям, не изменяя их напрямую. Это мощный инструмент для логирования, кэширования, авторизации и прочих нужд.
Иногда хочется обернуть функцию, чтобы автоматически логировать её вызов или измерять время исполнения. Это удобно делать через декоратор.
🎯 Итог
Декораторы позволяют добавлять поведение к функциям, не изменяя их напрямую. Это мощный инструмент для логирования, кэширования, авторизации и прочих нужд.
🗂 Быстрое создание вложенных словарей с defaultdict
Если ты работаешь с вложенными структурами типа dict of dict, можно избавиться от лишних проверок на наличие ключей, используя collections.defaultdict.
📌 Это особенно удобно при подсчёте данных или построении динамических структур.
🎯 Итог
С помощью defaultdict можно упростить работу с вложенными словарями и избежать лишней проверки наличия ключей. Идеально подходит для счётчиков и агрегаций.
Если ты работаешь с вложенными структурами типа dict of dict, можно избавиться от лишних проверок на наличие ключей, используя collections.defaultdict.
📌 Это особенно удобно при подсчёте данных или построении динамических структур.
🎯 Итог
С помощью defaultdict можно упростить работу с вложенными словарями и избежать лишней проверки наличия ключей. Идеально подходит для счётчиков и агрегаций.
🧹 Удаление дубликатов при сохранении порядка
Обычно set() убирает дубликаты, но не сохраняет порядок.
dict.fromkeys() создаёт словарь, где ключи — элементы списка (они уникальны), и при этом сохраняет порядок добавления (с Python 3.7+).
🎯 Итог
Чтобы быстро убрать дубликаты и сохранить порядок, используй list(dict.fromkeys(...)). Эффективно и элегантно.
Обычно set() убирает дубликаты, но не сохраняет порядок.
dict.fromkeys() создаёт словарь, где ключи — элементы списка (они уникальны), и при этом сохраняет порядок добавления (с Python 3.7+).
🎯 Итог
Чтобы быстро убрать дубликаты и сохранить порядок, используй list(dict.fromkeys(...)). Эффективно и элегантно.
🧵 Распаковка словаря в аргументы функции
Иногда нужно передать значения из словаря в функцию — можно сделать это красиво и лаконично.
**data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.
🎯 Итог
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй **. Это сокращает код и повышает читаемость.
Иногда нужно передать значения из словаря в функцию — можно сделать это красиво и лаконично.
**data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.
🎯 Итог
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй **. Это сокращает код и повышает читаемость.
🪄 Получение имени текущей функции: inspect.currentframe()
Иногда при отладке или логировании полезно автоматически узнать, в какой функции сейчас выполняется код — без хардкода имени вручную.
🎯 Итог
С помощью inspect.currentframe().f_code.co_name можно динамически получить имя текущей функции. Отлично подходит для логирования и отладки.
Иногда при отладке или логировании полезно автоматически узнать, в какой функции сейчас выполняется код — без хардкода имени вручную.
🎯 Итог
С помощью inspect.currentframe().f_code.co_name можно динамически получить имя текущей функции. Отлично подходит для логирования и отладки.
🧵 🖇️ Объединение итерируемых объектов с itertools.chain
Когда у тебя есть несколько списков, кортежей или других итерируемых объектов, и нужно пройти по ним, будто это один большой список — chain делает это без создания промежуточных структур.
🎯 Итог
itertools.chain позволяет объединять итерируемые объекты "на лету" без лишнего потребления памяти. Полезно для работы с большими наборами данных.
Когда у тебя есть несколько списков, кортежей или других итерируемых объектов, и нужно пройти по ним, будто это один большой список — chain делает это без создания промежуточных структур.
🎯 Итог
itertools.chain позволяет объединять итерируемые объекты "на лету" без лишнего потребления памяти. Полезно для работы с большими наборами данных.
📌 🔄 Клонирование объекта без copy через dataclasses.replace
Если вы работаете с dataclass и хотите создать копию объекта, изменив лишь пару полей, то можно использовать dataclasses.replace. Это удобнее и чище, чем вручную копировать все значения.
🎯 Итог
replace из dataclasses — быстрый способ клонировать объект с изменением выбранных атрибутов.
Если вы работаете с dataclass и хотите создать копию объекта, изменив лишь пару полей, то можно использовать dataclasses.replace. Это удобнее и чище, чем вручную копировать все значения.
🎯 Итог
replace из dataclasses — быстрый способ клонировать объект с изменением выбранных атрибутов.
📌 🕵️♂️ Автоматический лог SQL-запросов в SQLAlchemy
При отладке удобно видеть, какие именно запросы уходит в базу. В SQLAlchemy это можно включить одной строкой при создании engine.
🎯 Итог
Флаг echo=True в create_engine позволяет мгновенно включить логирование SQL-запросов без дополнительных инструментов.
При отладке удобно видеть, какие именно запросы уходит в базу. В SQLAlchemy это можно включить одной строкой при создании engine.
🎯 Итог
Флаг echo=True в create_engine позволяет мгновенно включить логирование SQL-запросов без дополнительных инструментов.
Быстрое создание словаря с уникальными элементами
Проблема: Часто нужно превратить список в словарь, где ключи — элементы списка, а значения — например, их длина или частота. Обычно для этого пишут циклы, что занимает место и время.
Используем dict comprehension вместе с set или enumerate для быстрой генерации словаря без лишних циклов.
🎯 Итог:
dict comprehension позволяет создавать словари в одну строку.
set помогает получить уникальные элементы.
enumerate позволяет учитывать порядок без дополнительных циклов.
Проблема: Часто нужно превратить список в словарь, где ключи — элементы списка, а значения — например, их длина или частота. Обычно для этого пишут циклы, что занимает место и время.
Используем dict comprehension вместе с set или enumerate для быстрой генерации словаря без лишних циклов.
🎯 Итог:
dict comprehension позволяет создавать словари в одну строку.
set помогает получить уникальные элементы.
enumerate позволяет учитывать порядок без дополнительных циклов.
🕵️♂️ Безопасное получение значения из словаря
При обращении к несуществующему ключу в словаре возникает KeyError. Чтобы этого избежать, часто пишут проверки if key in dict. Это громоздко.
Используй метод .get() с дефолтным значением. Он сразу вернёт либо значение по ключу, либо запасное, если ключа нет.
При обращении к несуществующему ключу в словаре возникает KeyError. Чтобы этого избежать, часто пишут проверки if key in dict. Это громоздко.
Используй метод .get() с дефолтным значением. Он сразу вернёт либо значение по ключу, либо запасное, если ключа нет.
📌 📊 Удобное логирование запросов в консоль
Когда приложение растет, print() для отладки уже не подходит. Нам нужно полноценное логирование. В Python есть модуль logging, который позволяет красиво и гибко выводить информацию.
🎯 Итог
Заменяй print() на logging — получишь более наглядный и управляемый вывод.
Когда приложение растет, print() для отладки уже не подходит. Нам нужно полноценное логирование. В Python есть модуль logging, который позволяет красиво и гибко выводить информацию.
🎯 Итог
Заменяй print() на logging — получишь более наглядный и управляемый вывод.
📌 🧵 Простое параллельное выполнение с ThreadPoolExecutor
Когда нужно ускорить выполнение нескольких независимых задач (например, загрузку файлов или запросы к API), можно использовать ThreadPoolExecutor из модуля concurrent.futures.
🎯 Итог
ThreadPoolExecutor — простой способ запускать функции в нескольких потоках и ускорять выполнение программы.
Когда нужно ускорить выполнение нескольких независимых задач (например, загрузку файлов или запросы к API), можно использовать ThreadPoolExecutor из модуля concurrent.futures.
🎯 Итог
ThreadPoolExecutor — простой способ запускать функции в нескольких потоках и ускорять выполнение программы.
📌 ⚡ Измеряем время выполнения кода с timeit
Иногда нужно быстро узнать, сколько времени занимает выполнение куска кода. Вместо того чтобы вручную засовывать time.time(), можно использовать модуль timeit, который создан именно для этого.
Модуль автоматически несколько раз выполняет код и выдаёт среднее время — удобно для сравнения разных реализаций.
🎯 Итог
timeit — быстрый способ измерить производительность и выбрать оптимальное решение.
Иногда нужно быстро узнать, сколько времени занимает выполнение куска кода. Вместо того чтобы вручную засовывать time.time(), можно использовать модуль timeit, который создан именно для этого.
Модуль автоматически несколько раз выполняет код и выдаёт среднее время — удобно для сравнения разных реализаций.
🎯 Итог
timeit — быстрый способ измерить производительность и выбрать оптимальное решение.