🧠 Переопределение стандартного поведения функций через декоратор
Иногда хочется обернуть функцию, чтобы автоматически логировать её вызов или измерять время исполнения. Это удобно делать через декоратор.
🎯 Итог
Декораторы позволяют добавлять поведение к функциям, не изменяя их напрямую. Это мощный инструмент для логирования, кэширования, авторизации и прочих нужд.
Иногда хочется обернуть функцию, чтобы автоматически логировать её вызов или измерять время исполнения. Это удобно делать через декоратор.
🎯 Итог
Декораторы позволяют добавлять поведение к функциям, не изменяя их напрямую. Это мощный инструмент для логирования, кэширования, авторизации и прочих нужд.
🗂 Быстрое создание вложенных словарей с 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 — быстрый способ измерить производительность и выбрать оптимальное решение.
📌 📝 Чтение больших файлов построчно
Если файл очень большой, не стоит загружать его целиком в память с помощью .read(). Эффективнее читать его по строкам через итерацию — это экономит ресурсы и работает быстрее.
🎯 Итог
Для больших файлов всегда лучше использовать построчное чтение, чтобы не перегружать память и ускорить обработку.
Если файл очень большой, не стоит загружать его целиком в память с помощью .read(). Эффективнее читать его по строкам через итерацию — это экономит ресурсы и работает быстрее.
🎯 Итог
Для больших файлов всегда лучше использовать построчное чтение, чтобы не перегружать память и ускорить обработку.
Forwarded from TRNDX.
Новенькие флагманские iPhone только начали продавать, а мы уже привезли их и теперь собираемся подарить кому-то из вас.
Условия как всегда простые:
1. Подписаться на TRNDX., Первый Московский и Джейпег Малевича
2. Нажать «Участвую!» под этим постом
Итоги подведём уже 10 октября — бот рандомно выберет двух победителей. Девайсы за свой счёт застрахуем и отправим в любую точку мира. Всем удачи!
Please open Telegram to view this post
VIEW IN TELEGRAM