Программистика
关闭频道
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
显示更多5 573
订阅者
-324 小时
-427 天
-12130 天
帖子存档
5 571
👩💻 TypeVar, Generic и Protocol — как писать библиотеки с полной поддержкой type hints
Если вы создаёте библиотеку для Python, просто писать
def foo(x: int) -> str недостаточно. Пользователи хотят автодополнение, строгую проверку типов и документацию прямо в IDE. Для этого есть TypeVar, Generic и Protocol. Разбираемся без магии.
🧱 Почему обычных type hints мало
🟢 Локальные hints полезны, но не передают зависимости типов:
def first(lst: list) -> str:
return lst[0]
➡️ IDE не понимает, что возвращаемый тип зависит от типа элементов списка.
📌 TypeVar — универсальный тип
TypeVar позволяет указать, что один и тот же тип повторяется:
from typing import TypeVar, Sequence
T = TypeVar('T') # универсальный тип
def first(lst: Sequence[T]) -> T:
return lst[0]
x: int = first([1, 2, 3]) # IDE знает: x -> int
y: str = first(["a", "b", "c"]) # IDE знает: y -> str
✅ Полезно для функций, где вход и выход зависят друг от друга.
📦 Generic — обобщённые классы
Если вы пишете класс, который работает с любыми типами:
from typing import Generic, TypeVar
T = TypeVar('T')
class Stack(Generic[T]):
def __init__(self) -> None:
self.items: list[T] = []
def push(self, item: T) -> None:
self.items.append(item)
def pop(self) -> T:
return self.items.pop()
stack_int = Stack[int]()
stack_int.push(42)
x = stack_int.pop() # IDE знает: x -> int
➡️ Без Generic IDE не сможет подсказать тип элементов.
🧩 Protocol — контракт интерфейса
Protocol позволяет объявлять «как должен себя вести объект», без жёсткого наследования.
from typing import Protocol
class SupportsClose(Protocol):
def close(self) -> None:
...
def cleanup(resource: SupportsClose) -> None:
resource.close()
class FileLike:
def close(self) -> None:
print("Закрыто")
cleanup(FileLike()) # ✅ Типы совпадают, работает
✅ Protocol полезен для duck typing + type hints.
🪖 Комбинируем всё
Можно делать библиотеки с полной типизацией и автодополнением:
from typing import Generic, TypeVar, Protocol
T = TypeVar('T')
class Serializer(Protocol[T]):
def serialize(self, value: T) -> str:
...
def deserialize(self, data: str) -> T:
...
class IntSerializer:
def serialize(self, value: int) -> str:
return str(value)
def deserialize(self, data: str) -> int:
return int(data)
def save_value(serializer: Serializer[T], value: T) -> str:
return serializer.serialize(value)
s = save_value(IntSerializer(), 42) # IDE знает: s -> str
💡 Запомни
👉 TypeVar — для связывания типов входа и выхода 👉 Generic — для обобщённых классов 👉 Protocol — для интерфейсов и duck typing🗣 Если хотите пост про
Literal, Final, TypedDict и продвинутые паттерны типизации — пишите темы, мы сделаем! 🚀
Программистика || #Статья5 571
🖥 pre-commit — ваш автоматический код-ревьюер.
Эта библиотека превращает Git-хуки в мощную систему контроля качества кода. Вместо ручного запуска линтеров перед каждым комитом, pre-commit автоматически проверяет изменения на качество — будь то синтаксические ошибки в Python или форматирование SCSS-файлов.🖥 Ссылка на GitHub Программистика|| #Репозиторий
5 571
👩💻 codecademy.com
Интерактивная платформа, предлагающая бесплатный курс для начинающих, который познакомит вас с основами Python
🌐 СсылкаПрограммистика || #Ресурсы
5 571
👀 FastAPI: веб-разработка на Python
FastAPI — относительно новый, но надежный фреймворк с чистым дизайном, использующий преимущества актуальных возможностей Python. Как следует из названия, FastAPI отличается высоким быстродействием и способен конкурировать в этом с аналогичными фреймворками на таких языках, как Golang. Эта практическая книга расскажет разработчикам, знакомым с Python, как FastAPI позволяет достичь большего за меньшее время и с меньшим количеством кода.Программистика || #doc
5 571
👀 Основы динамики сооружений с применением Python
Курс знакомит с основами динамики сооружений, рассматриваются системы с одной и несколькими степенями свободы, их свободные и вынужденные колебания, в том числе с учетом демпфирования. Расчеты реализованы с использованием языка программирования Python.
🌐 СсылкаПрограммистика || #Course
5 571
👩💻 В сеть вывалилась гигантская куча курсов и книг от топовых IT‑школ
Держи сотни гигабайт свежих уроков, и каждую неделю мы подкидываем ещё!
• 1612 ГБ — DevOps
• 1402 ГБ — Python
• 1300 ГБ — C, C++
• 1815 ГБ — Frontend
• 1515 ГБ — Backend
• 898 ГБ — ИБ, Хакинг
• 996 ГБ — Kotlin, Swift
• 212 ГБ — JavaScript
• 315 ГБ — Flutter
• 820 ГБ — Go, PHP
• 419 ГБ — Java, Rust
• 648 ГБ — GameDev
• 517 ГБ — Windows, Linux
• 998 ГБ — Дизайн (UX/UI)
• 617 ГБ — Нейросети (ML/RL)
• 546 ГБ — БД (SQL & NoSQL)
• 687 ГБ — Аналитика данных
• 115 ГБ — QA-тестирование
Подписывайся и не плати за то, что можно получить бесплатно
5 571
👩💻 uv: pip на стероидах — ставит пакеты в 100 раз быстрее
Устал ждать, пока pip устанавливает зависимости? uv — это менеджер пакетов на Rust, который делает pip смешным. Там, где pip думает 30 секунд, uv справляется за полсекунды.
Установка библиотек, создание виртуальных окружений, разрешение зависимостей — всё летает. Он полностью совместим с pip и poetry, поддерживает pyproject.toml и работает так же просто. Просто меняешь
pip на uv pip в команде и получаешь невероятную скорость без изменения workflow.
Установка:
curl -LsSf https://astral.sh/uv/install.sh | sh
Использование:
uv venv # Создать виртуальное окружение
uv pip install requests # Установить пакет
uv pip sync requirements.txt # Синхронизировать зависимости
Программистика || #doc5 571
👀 Практикум по статистике на Python
Курс позволит закрепить базовые знания статистики и широко применяемых статистических методов на практических тестах и заданиях, в том числе с использованием Python (pandas, numpy, scipy, statsmodels, matplotlib).
🌐 СсылкаПрограммистика || #Course
5 571
Python – это просто. Пошаговое руководство по программированию и анализу данных
Рассмотрены основы синтаксиса языка Python на примере дистрибутива Anaconda. Показаны приложения IPython, Spyder IDE, Jupyter Notebook. Описан синтаксис переменных, функций, циклов. Подробно изучаются структуры данных в Python: строки, списки, кортежи, множества и словари. Объясняется понятие классов и их применение в объектно-ориентированном программировании. Описаны возможности библиотеки обработки изображений Pillow, библиотеки Tkinter для создания приложений с графическим интерфейсом. Отдельный раздел посвящен обработке ошибок и исключений в программах. Рассматриваются библиотеки NumPy и Pandas, приводятся практические примеры их использования для анализа и обработки данных. Описана библиотека Matplotlib и ее возможности в сфере визуализации данных.
Программистика || #Книги
5 571
Джуны — всё, ИИ победил. По статистике BCG, за последний год компании выбросили на улицу 75% молодняка. При этом миддлам и сеньорам зарплаты подняли в 4 (!) раза.
Чтобы подняться до уровня элит в аномально короткие сроки — подпишитесь на легендарные каналы для айтишников:
Новости и инсайды
Фронтенд разработка
ИИ и биг дата
Node js
Вёрстка
Питон и нейросети
QA-тестировщики
Там раскрыли инфу из курсов общей стоимостью 5.000.000р в эксклюзивных пошаговых инструкциях. Пока остальные пойдут на дно якорем, вы войдете в 10% тех, кто сломал систему.
5 571
👩💻 asyncio debugging — почему task зависла и не выполнится
Ты добавил
async/await, но задача так и не закончилась. Event loop крутится, а результата нет. И непонятно, где искать проблему — никаких ошибок, просто тишина.
🧱 Главные причины, почему task зависает
🟢 Забыл `await` — корутина вообще не запустилась:
async def fetch_data():
asyncio.sleep(1) # ❌ без await не работает
return "done"
Корутина создана, но не выполняется. Python даже warning не покажет, пока объект не удалится из памяти.
🟢 Используешь блокирующие вызовы — event loop встал:
async def process():
time.sleep(2) # ❌ блокирует весь loop
Все остальные task'и ждут, пока этот завершится. Используй await asyncio.sleep() или loop.run_in_executor() для синхронного кода.[4][5][6]
🟢 Создал task, но не дождался его завершения:
async def main():
asyncio.create_task(work())
# main() закончился → task убит
Task запустился, но main завершился раньше — незавершённые задачи просто отбрасываются.
✔️ Нужно так:
task = asyncio.create_task(work())
await task # или asyncio.gather()
🟢 Бесконечный цикл без `await` внутри:
async def loop_task():
while True:
do_something() # нет await
Event loop не может переключиться на другие задачи — они зависнут навсегда.[9]
📌 Как правильно дебажить
1️⃣ Включи debug mode — сразу увидишь проблемы:
asyncio.run(main(), debug=True)
или через переменную окружения:
PYTHONASYNCIODEBUG=1 python script.py
Покажет:
🟢 где корутина создана, но не awaited 🟢 какие task'и выполняются слишком долго (> 100ms) 🟢 где нарушена thread-safety2️⃣ Отслеживай "долгие" task'и вручную:
import time
TASK_DICT = {}
async def monitor_tasks(limit_sec=3):
while True:
for task in asyncio.all_tasks():
name = task.get_name()
if name not in TASK_DICT:
TASK_DICT[name] = time.monotonic()
duration = time.monotonic() - TASK_DICT[name]
if duration > limit_sec:
print(f'{name} зависла: {duration:.2f}s')
await asyncio.sleep(1)
Такой подход ловит задачи, которые живут слишком долго, даже если они не завершились.
3️⃣ Используй `asyncio.wait_for()` с таймаутом:
try:
result = await asyncio.wait_for(slow_task(), timeout=5.0)
except asyncio.TimeoutError:
print("Task застряла!")
4️⃣ Логируй всё подозрительное:
import logging
logging.basicConfig(level=logging.DEBUG)
async def risky_task():
logging.debug("Task started")
await something()
logging.debug("Task done")
Если второе сообщение не появилось — знаешь, где искать.
🧪 Бонус: отлов незавершённых задач при выходе
async def main():
try:
await asyncio.gather(task1(), task2())
finally:
tasks = [t for t in asyncio.all_tasks() if not t.done()]
for task in tasks:
task.cancel()
await asyncio.gather(*tasks, return_exceptions=True)
💡 Запомни:
📌 Без await корутина не запустится — только создастся объект 📌 Блокирующий код = застывший event loop 📌 Debug mode обязателен во время разработки 📌 asyncio.wait_for() с таймаутом спасает от вечного ожидания 📌 Незавершённые task'и при выходе из main — это утечка и багПрограммистика || #Статья
5 571
⚡️ Linux и DevOps теперь в Telegram!
Ребята делают реально классный канал про IT — просто, понятно и без воды.
О Linux, DevOps, разработке, безопасности и инструментах, которые помогают работать эффективнее.
Подписывайтесь: @recura_tech
5 571
👀 Сохрани меня, если сможешь: модули и файлы в Python
Вы узнаете, как сохранять и читать данные, разбивать код на удобные части, использовать сторонние библиотеки, управлять зависимостями и работать с виртуальным окружением.
Курс идеально подходит для выпускников «Функционального программирования на Python» и всех, кто хочет перейти от простых скриптов к созданию настоящих Python-проектов!
🌐 СсылкаПрограммистика || #Course
5 571
⚡️⚡️Новую базу курсов слили в сеть — хакеры снова выложили в паблик тонну курсов по IT от онлайн школ.
Материала почти на пол-терабайта, мы загрузили всё на канал, там есть:
🐍 Python и нейросети (28 полных курсов + библиотеки)
📈 Data Analysis + машинное обучение (15 курсов)
👨🏻💻 Frontend (от JS до React) — (20 курсов + библиотеки)
🤖 Backend + базы Данных (30 курсов)
🛡 Информационная безопасность (Защита+Атака) — (14 курсов)
🎮 Разработка игр (11 курсов)
Всё можно забрать бесплатно и смотреть без скачивания ➡️ @IT_SLIV
5 571
👀 Базовые алгоритмы. Реализация на Python и C++ на примере классических игр
В книге дается базовая алгоритмическая подготовка, классические алгоритмы разобраны одновременно на двух языках — C++ и Python на примере широко известных и интуитивно понятных компьютерных игр. Наглядно излагается реализация циклов, перебора, рекурсии, эвристики, рассматривается работа с деревьями решений, на примере шахмат предлагается знакомство с прямоугольными координатами, дается введение в самообучающиеся алгоритмы. Книга ориентирована как на начинающих программистов, так и на читателей, планирующих перейти на C++ или Python как на второй язык. Примеры, рассмотренные в книге, помогут сделать первые шаги на пути к профессиональному программированию игр.
Программистика || #Книги
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
