Python обучающий
61.6K subscribers
818 photos
7 videos
404 links
Здесь есть всё, чтобы упростить изучение Python. Без воды и сложных терминов.

Сотрудничество: @bateman24, @justcage

Работаем с @Tgpodbor_official

Ссылка РНК: https://clck.ru/3Ghwjd
Download Telegram
🧠 Переопределение стандартного поведения функций через декоратор

Иногда хочется обернуть функцию, чтобы автоматически логировать её вызов или измерять время исполнения. Это удобно делать через декоратор.

🎯 Итог
Декораторы позволяют добавлять поведение к функциям, не изменяя их напрямую. Это мощный инструмент для логирования, кэширования, авторизации и прочих нужд.
🗂 Быстрое создание вложенных словарей с defaultdict

Если ты работаешь с вложенными структурами типа dict of dict, можно избавиться от лишних проверок на наличие ключей, используя collections.defaultdict.

📌 Это особенно удобно при подсчёте данных или построении динамических структур.

🎯 Итог
С помощью defaultdict можно упростить работу с вложенными словарями и избежать лишней проверки наличия ключей. Идеально подходит для счётчиков и агрегаций.
🧹 Удаление дубликатов при сохранении порядка

Обычно set() убирает дубликаты, но не сохраняет порядок.

dict.fromkeys() создаёт словарь, где ключи — элементы списка (они уникальны), и при этом сохраняет порядок добавления (с Python 3.7+).

🎯 Итог
Чтобы быстро убрать дубликаты и сохранить порядок, используй list(dict.fromkeys(...)). Эффективно и элегантно.
🧵 Распаковка словаря в аргументы функции

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

**data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.

🎯 Итог
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй **. Это сокращает код и повышает читаемость.
🪄 Получение имени текущей функции: inspect.currentframe()

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

🎯 Итог
С помощью inspect.currentframe().f_code.co_name можно динамически получить имя текущей функции. Отлично подходит для логирования и отладки.
🧵 🖇️ Объединение итерируемых объектов с itertools.chain

Когда у тебя есть несколько списков, кортежей или других итерируемых объектов, и нужно пройти по ним, будто это один большой список — chain делает это без создания промежуточных структур.

🎯 Итог
itertools.chain позволяет объединять итерируемые объекты "на лету" без лишнего потребления памяти. Полезно для работы с большими наборами данных.
📌 🔄 Клонирование объекта без copy через dataclasses.replace

Если вы работаете с dataclass и хотите создать копию объекта, изменив лишь пару полей, то можно использовать dataclasses.replace. Это удобнее и чище, чем вручную копировать все значения.

🎯 Итог
replace из dataclasses — быстрый способ клонировать объект с изменением выбранных атрибутов.
📌 🕵️‍♂️ Автоматический лог SQL-запросов в SQLAlchemy

При отладке удобно видеть, какие именно запросы уходит в базу. В SQLAlchemy это можно включить одной строкой при создании engine.

🎯 Итог
Флаг echo=True в create_engine позволяет мгновенно включить логирование SQL-запросов без дополнительных инструментов.
📌 Автоматическая метка времени при добавлении записей в БД

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

🎯 Итог

Использование server_default=func.now() и onupdate=func.now() автоматизирует работу с датами в таблицах и избавляет от рутины.
Быстрое создание словаря с уникальными элементами

Проблема: Часто нужно превратить список в словарь, где ключи — элементы списка, а значения — например, их длина или частота. Обычно для этого пишут циклы, что занимает место и время.

Используем dict comprehension вместе с set или enumerate для быстрой генерации словаря без лишних циклов.

🎯 Итог:
dict comprehension позволяет создавать словари в одну строку.
set помогает получить уникальные элементы.
enumerate позволяет учитывать порядок без дополнительных циклов.
🕵️‍♂️ Безопасное получение значения из словаря

При обращении к несуществующему ключу в словаре возникает KeyError. Чтобы этого избежать, часто пишут проверки if key in dict. Это громоздко.

Используй метод .get() с дефолтным значением. Он сразу вернёт либо значение по ключу, либо запасное, если ключа нет.
📌 📊 Удобное логирование запросов в консоль

Когда приложение растет, print() для отладки уже не подходит. Нам нужно полноценное логирование. В Python есть модуль logging, который позволяет красиво и гибко выводить информацию.

🎯 Итог

Заменяй print() на logging — получишь более наглядный и управляемый вывод.
📌 Быстрая проверка скорости выполнения кода

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

🎯 Итог

time.perf_counter() — простой способ измерять время выполнения кода с высокой точностью.
📌 🧵 Простое параллельное выполнение с ThreadPoolExecutor

Когда нужно ускорить выполнение нескольких независимых задач (например, загрузку файлов или запросы к API), можно использовать ThreadPoolExecutor из модуля concurrent.futures.

🎯 Итог
ThreadPoolExecutor — простой способ запускать функции в нескольких потоках и ускорять выполнение программы.
📌 Измеряем время выполнения кода с timeit

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

Модуль автоматически несколько раз выполняет код и выдаёт среднее время — удобно для сравнения разных реализаций.

🎯 Итог

timeit — быстрый способ измерить производительность и выбрать оптимальное решение.
📌 📝 Чтение больших файлов построчно

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

🎯 Итог

Для больших файлов всегда лучше использовать построчное чтение, чтобы не перегружать память и ускорить обработку.
Forwarded from TRNDX.
⚡️Запускаем новый розыгрыш СВЕЖАЙШИХ гаджетов от Apple — iPhone 17 Pro и iPhone Air!

Новенькие флагманские iPhone только начали продавать, а мы уже привезли их и теперь собираемся подарить кому-то из вас.

Условия как всегда простые:
1. Подписаться на TRNDX., Первый Московский и Джейпег Малевича
2. Нажать «Участвую!» под этим постом

Итоги подведём уже 10 октября — бот рандомно выберет двух победителей. Девайсы за свой счёт застрахуем и отправим в любую точку мира. Всем удачи!
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 🔄 Обмен значениями переменных без временной

Обычно, чтобы поменять местами значения, используют временную переменную. Но в Python есть встроенный способ сделать это элегантнее.

🎯 Итог

Python позволяет менять значения местами в одну строку без временных переменных, что делает код чище и читаемее.
Бывший пиарщик Сбера и Пепси-колы Юрий Сапожников завел канал, где открыто показывает внутрянку крупных брендов и шутит про русский бизнес.

Еще он на пальцах объясняет, почему все соцсети в 2025 году — это маркетплейсы, почему мы все подсели на Вайлдбериз, и как доставка стала новой нормой. И всё это с цифрами, личными комментариями, ну и мемами, конечно.

Короче Поддержите Юру подпиской — видно, что чувак шарит: клиик
📌 📅 Получение текущей даты и времени в нужном формате

Иногда нужно вывести дату и время в читаемом виде (например, для логов). Python делает это просто через модуль datetime.

🎯 Итог

Форматирование дат и времени в Python — гибкое и простое, можно подстроить вывод под любой формат (ISO, локальный, для логов и т. д.).