Python/ django
по всем вопросам @haarrp @itchannels_telegram - 🔥 все ит каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - 📚 @pythonlbooks РКН: clck.ru/3FmxmM
Показати більше📈 Аналітичний огляд Telegram-каналу Python/ django
Канал Python/ django (@pythonl) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 60 075 підписників, посідаючи 2 192 місце в категорії Технології та додатки та 10 214 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 60 075 підписників.
За останніми даними від 05 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -562, а за останні 24 години на -8, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 6.76%. Протягом перших 24 годин після публікації контент зазвичай збирає 3.58% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 4 065 переглядів. Протягом першої доби публікація в середньому набирає 2 153 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 15.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як github, claude, контекст, архитектура, api.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“по всем вопросам @haarrp
@itchannels_telegram - 🔥 все ит каналы
@ai_machinelearning_big_data -ML
@ArtificialIntelligencedl -AI
@datascienceiot - 📚
@pythonlbooks
РКН: clck.ru/3Fmxm...”
Завдяки високій частоті оновлень (останні дані отримано 07 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
pip, poetry, uv, hatch, pdm и др. — это уже не просто "pip install", а стратегическое решение.
В этом гайде сравниваются 6 ключевых инструментов, каждый со своими сильными и слабыми сторонами:
1️⃣ uv — самый быстрый и универсальный (написан на Rust)
✅ До 100× быстрее pip
✅ Объединяет pip, virtualenv и pip-tools
✅ Поддержка PyPI-паблишинга и Python-менеджмента
📌 Выбор для CI/CD и monorepo-проектов
2️⃣ Poetry 2 — стандарт для библиотек и модульных приложений
✅ Поддержка semantic versioning, lock-файлов, плагинов
✅ Отлично подходит для open source
📌 Идеален для reproducible builds и PyPI
3️⃣ Hatch — “Cargo для Python”
✅ Поддержка матриц окружений, monorepo, хуков
✅ Интеграция с uv для скорости
📌 Выбор для сложных enterprise-проектов и тестовых фреймворков
4️⃣ PDM — стандартизированный менеджер без virtualenv
✅ Поддержка PEP 582 (__pypackages__), PEP 621
✅ Изоляция без виртуалок, удобен для прототипов
📌 Подходит для rapid dev и экспериментальных сборок
5️⃣ Pipenv — простой интерфейс для приложений
✅ Pipfile, auto-venv, чистый CLI
📌 Хорош для небольших проектов и начинающих
6️⃣ pip — классика
✅ Совместим везде, гибкий
❌ Нет lock-файлов, окружений, требует внешних тулов
📌 Решение для легаси-проектов или скриптов
💡 Выводы:
• uv — лучший выбор для скорости, CI и автоматизации
• Poetry — стандарт для библиотек, особенно с open source
• Hatch — для сложных проектов и продвинутых пайплайнов
• PDM — для быстрой разработки и современных стандартов
• Pipenv — простой, но морально устарел
• pip — базовый минимум, но требует ручной сборки обвязки
Если ты:
🔹 Собираешь ML‑пайплайн → смотри в сторону uv + Hatch
🔹 Работаешь над библиотекой → Poetry 2 будет логичным выбором
🔹 Строишь монорепу или сложный фреймворк → Hatch + workspace
🔹 Пишешь простые скрипты или MVP → подойдёт PDM или Pipenv
🔗 Полный гайд
@pythonlwith, но не писать громоздкий класс с __enter__ и __exit__? Используй @contextmanager из contextlib:
from contextlib import contextmanager
import time
@contextmanager
def timer(label="Block"):
start = time.time()
print(f"[{label}] Start")
try:
yield
finally:
end = time.time()
print(f"[{label}] End — elapsed: {end - start:.3f}s")
# Пример использования
with timer("Download step"):
time.sleep(1.2)
📌 До yield — код до with
📌 После yield — код после with
🔥 Это мощный способ:
- логировать действия,
- временно менять окружение (stdout, переменные, режимы),
- управлять ресурсами, не создавая классы.
@pythonl
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)
def divide(a, b):
return a / b
def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")
if __name__ == "__main__":
main()
📄 В логе:
2025-07-24 12:00:00 __main__ INFO Start
❗ А сам ZeroDivisionError — только в консоли. Лог молчит.
✅ Решение — использовать sys.excepthook:
import sys
def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))
sys.excepthook = handle_uncaught_exception
Теперь, если произойдёт ошибка, она попадёт в лог:
CRITICAL Uncaught exception Traceback (most recent call last): ... ZeroDivisionError: division by zero📌 Вывод: — Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook — Это особенно важно в продакшене: лог покажет, где и почему всё сломалось — Просто и надёжно 🔗 Подробнее @pythonl
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)
def divide(a, b):
return a / b
def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")
if __name__ == "__main__":
main()
📄 В логе:
2025-07-24 12:00:00 __main__ INFO Start
❗ А сам ZeroDivisionError — только в консоли. Лог молчит.
✅ Решение — использовать sys.excepthook:
import sys
def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))
sys.excepthook = handle_uncaught_exception
Теперь, если произойдёт ошибка, она попадёт в лог:
CRITICAL Uncaught exception Traceback (most recent call last): ... ZeroDivisionError: division by zero📌 Вывод: — Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook — Это особенно важно в продакшене: лог покажет, где и почему всё сломалось — Просто и надёжно 🔗 Подробнее @pythonl
pip install pynguin, минимальная конфигурация требует указания пути к проекту и модулям для тестирования.
🤖 GitHub
@pythonlsorted() с key, комбинируя несколько полей с нужной логикой сортировки. Вот как:
people = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 25},
{"name": "David", "age": 30},
]
# Сортировка: сначала по age (по возрастанию), затем по name (по убыванию)
sorted_people = sorted(people, key=lambda p: (p["age"], -ord(p["name"][0])))
for person in sorted_people:
print(person)
💡 Работает и с объектами, и с кортежами — главное, правильно составить key. Особенно полезно для фильтрации списков в табличных данных, при выводе результатов или генерации отчётов.
#python
Больше коротких уроков тут
# Создаем класс динамически
MyDynamicClass = type(
'MyDynamicClass', # имя класса
(object,), # родительские классы
{'x': 42, 'hello': lambda self: f'Hello, x = {self.x}'} # атрибуты и методы
)
obj = MyDynamicClass()
print(obj.hello()) # Hello, x = 42
🔥 Что тут происходит?
type() в обычном использовании возвращает тип объекта.
Но если передать три аргумента, он создаёт новый класс.
Мы задали имя, базовые классы и словарь атрибутов.
💡 Это то, что делает Python "Pythonic" — классы это тоже объекты, и ты можешь создавать их на лету.
@pythonlcudf.pandas.
Для примеры были взяты:
📉 Скользящие средние (50D и 200D)
📅 Недельная статистика закрытия рынков
🧊 В общей сложности ~18M строк
Результат впечатляет : удалось добиться**ускорения обработки данных в 20–40 раз
Код скрипта не менялся вообще — тот же pandas, но на GPU.
Это один из примеров, где ускорение достигается без переписывания логики кода.
🟡 Потестить самому можно в Colab
🟡 Другие примеры с кодом — здесь
@ai_machinelearning_big_data
#datasckience #ml #nvidia #gpu #pandas #python
def append_to_list(val, my_list=[]):
my_list.append(val)
return my_list
print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))
🤯 Подвох
Многие думают, что каждый вызов append_to_list() создаёт новый список, и ожидают вывод:
[1]
[2]
[3]
Но на самом деле Python выведет:
[1]
[1, 2]
[1, 2, 3]
🧠 Почему так происходит?
В Python значения аргументов по умолчанию вычисляются один раз — при определении функции, а не при каждом вызове.
Значение my_list=[] создаётся один раз и сохраняется между вызовами. Это работает как статическая переменная внутри функции.
✅ Как это исправить?
Используй None как значение по умолчанию:
def append_to_list(val, my_list=None):
if my_list is None:
my_list = []
my_list.append(val)
return my_list
print(append_to_list(1)) # [1]
print(append_to_list(2)) # [2]
print(append_to_list(3)) # [3]
💡 Вывод
Не используйте изменяемые объекты (например, list, dict, set) как значения по умолчанию для аргументов функций в Python.
@pythonlmoviepy
— Преобразование аудио в текст через SpeechRecognition
— Извлечение субтитров
— Автоматизация задач с файлами .mp3, .wav, .mp4 и .avi
🛠 Глава написана в привычном стиле — просто, на примерах, с пояснениями к коду. Идеально подойдёт для тех, кто хочет быстро научиться обрабатывать медиафайлы на Python без сложных фреймворков.
📎 Читать
@Pythonl
data = [1, 2, 3, ..., 1000000] # большой список
queries = [42, 9999, 123456]
# Медленно:
for q in queries:
if q in data:
print(q)
🔁 Каждый q in data проходит весь список → медленно.
✅ Правильный способ:
Преобразуй список в set один раз — и все станет быстро:
data_set = set(data)
for q in queries:
if q in data_set:
print(q)
💡 Проверка in в set работает мгновенно (как в словаре).
Такой трюк особенно полезен, если:
-у тебя много данных
-ты делаешь много проверок на вхождение
📌 Запомни: if x in список: — медленно
Лучше: if x in set(список): — быстро!
@pythonl
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
