Программистика
Closed channel
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
Show more5 573
Subscribers
-324 hours
-427 days
-12130 days
Posts Archive
5 571
👩💻 Type Hints без иллюзий: Python не станет статически типизированным
Все ставят type hints везде, думают, что это сделает код быстрее или предотвратит ошибки в runtime. Спойлер: нет. Type hints — это подсказки для тебя и для инструментов, а не для Python.
🧱 Типичные заблуждения
🟡 "Type hints делают код быстрее"
def add(a: int, b: int) -> int:
return a + b
add("hello", "world") # Работает! Python игнорирует hints
Результат: Python полностью игнорирует type hints в runtime. Никакой проверки, никакого ускорения.
🟡 "Type hints защищают от ошибок"
def greet(name: str) -> str:
return f"Hello, {name}"
greet(123) # Работает без ошибок!
Python не проверяет типы. Нужен mypy или pyright.
🟡 "Type hints нужны везде"
x: int = 5
y: str = "hello"
z: bool = True
Результат: захламлённый код. Type hints нужны где есть неочевидность, а не везде подряд.
🟡 "Hints замедляют код"
На самом деле: минимальный overhead только при загрузке модуля. В runtime — ноль влияния.
📌 Зачем они РЕАЛЬНО нужны
1️⃣ IDE видит типы → автодополнение работает
Без hints:
def process_data(data):
return data.split() # IDE не знает, что у data есть .split()
С hints:
def process_data(data: str) -> list[str]:
return data.split() # IDE знает, что data это str
Результат: автодополнение, подсказки методов, меньше ошибок при написании.
2️⃣ Статические анализаторы (mypy, pyright) ловят баги ДО запуска
def add_numbers(a: int, b: int) -> int:
return a + b
result = add_numbers(5, "10") # mypy/pyright: ERROR!
Запускаешь mypy script.py → видишь ошибку до запуска кода.[1][3]
3️⃣ Документация "в коде"
Без hints:
def fetch_user(user_id):
# Что такое user_id? str? int? UUID?
pass
С hints:
def fetch_user(user_id: int) -> dict[str, Any]:
# Понятно: на вход int, на выход словарь
pass
Результат: код читается как документация.[5][3]
4️⃣ Снижение багов в production
Пример из AI/ML:
def train_model(data):
# Кто-то передал NumPy array вместо PyTorch tensor
# Код упал через 3 часа обучения
pass
С hints:
import torch
def train_model(data: torch.Tensor) -> None:
# mypy сразу покажет ошибку, если передать не Tensor
pass
Результат: ошибки ловятся на этапе разработки, а не в production.
📌 Как правильно использовать
1️⃣ Базовые типы
def greet(name: str, age: int) -> str:
return f"{name} is {age} years old"
# Переменные (редко нужно)
x: int = 5
2️⃣ Списки, словари, множества
Python 3.9+:
def process_items(items: list[str]) -> dict[str, int]:
return {item: len(item) for item in items}
# Старый синтаксис (не используй)
from typing import List, Dict
def process_items(items: List[str]) -> Dict[str, int]:
pass
3️⃣ Optional (может быть None)
def find_user(user_id: int) -> str | None:
# Может вернуть str или None
if user_id > 0:
return "Alice"
return None
4️⃣ Union
def process_input(data: int | str) -> str:
if isinstance(data, int):
return str(data)
return data
5️⃣ Callable
from collections.abc import Callable
def execute(func: Callable[[int, int], int], a: int, b: int) -> int:
return func(a, b)
execute(lambda x, y: x + y, 5, 3) # OK
6️⃣ Generics
from typing import TypeVar
T = TypeVar('T')
def first_element(items: list[T]) -> T | None:
return items[0] if items else None
result = first_element([1, 2, 3]) # result: int | None
📌 Инструменты для проверки типов
Mypy — классика, написан на Python:
pip install mypy
mypy script.py
Pyright — от Microsoft, очень быстрый:
pip install pyright
pyright script.py
1. Не пиши hints везде
# Плохо
x: int = 5
y: str = "hello"
# Хорошо
x = 5 # Очевидно
y = "hello" # Очевидно
2. Пиши hints для функций
# Хорошо
def calculate_total(price: float, quantity: int) -> float:
return price * quantity
💡 Запомни:
👉 Type hints — для инструментов, не для Python 👉 Python игнорирует hints в runtime 👉 Нужен mypy/pyright для проверкиПрограммистика || #Статья
5 571
🖥 AI Math Notes - это интерактивное приложение, которое позволяет рисовть математические формулы на доске и получитать решения.
Как только уравнение написано, приложение использует мультимодальный LLM для его решения. Приложение построено с использованием Python с библиотекой Tkinter для графического интерфейса пользователя и PIL для обработки изображений.🐱 Ссылка на GitHub Программистика || #Library
5 571
🗺 Roadmap.sh Python: Карта развития питониста
Roadmap.sh Python — визуальная карта для изучения Python с разбором по направлениям: backend, data science, DevOps. Показывает последовательность обучения и зависимости между навыками. Помогает не прыгать как сумасшедший.
🌐Ссылка на сервисПрограммистика || #Ресурсы
5 571
Cursor — твой AI-партнёр в разработке ПО
Устали тратить время на поиск ошибок и шаблонный код?
Cursor — это среда разработки нового поколения с искусственным интеллектом, которая помогает писать, анализировать и улучшать код быстрее, чем когда-либо.
Что умеет Cursor:
• Пишет и дополняет код на естественном языке
• Находит и исправляет ошибки
• Предлагает оптимизации и лучшие практики
• Объясняет сложные участки кода
• Работает как полноценная IDE, только умнее
Сосредоточьтесь на архитектуре и логике — рутину возьмёт на себя ИИ.
Поставщик Cursor в России — компания «Системный софт».
Оплата в рублях, закрывающие документы и поддержка при подключении.
Попробуйте Cursor уже сегодня: https://clck.ru/3QJ7Ke
Перейти на сайт
#реклама 16+
syssoft.ru
О рекламодателе
5 571
🖥 Django-Tastypie — это библиотека для создания REST API в Django, которая упрощает процесс работы с данными, сериализацией и аутентификацией!
Она поддерживает различные форматы данных (JSON, XML, YAML), позволяет работать как с SQL, так и NoSQL базами и предоставляет встроенные инструменты для фильтрации, сортировки и пагинации запросов. Tastypie минимизирует необходимость написания повторяющегося кода, позволяя разработчикам быстро создавать мощные API.
🐱 Ссылка на GitHub
Программистика || #Library
5 571
"Ты че, дурак?" – базовая реакция сеньора на тех, кто покупает IT курсы
Дело в том, что онлайн школы создают инкубаторных айтишников, которые в реальных условиях попросту зависнут.
Трушные ребята учатся на жизненных каналах для айтишников. Вот топ-5 от тимлида из Сбера:
⚙️ Технолоджия – для тех, кто хочет быть в курсе новостей в айти
🧠 Ai-чница – способы превратить нейросети в заработок $$$
💻 ИИ тебя заменит! – тенденции айти рынка в связке с нейросетями
4️⃣ Войти в IT – тонны бесплатного обучения для прогеров
😄 IT индус – сборник айти мемов
5 571
Мощный Python: паттерны и стратегии современного программирования
Как стать экспертом в создании сложных и мощных приложений на Python, не тратя время на повторение уже известных основ или перечисление ненужных функций? Аарон Максвелл фокусируется на первопринципах Python, которые действуют подобно катализаторам для всего остального: достаточно получить 5 % знаний в области программирования, чтобы остальные 95 % подтянулись автоматически.Программистика|| #Книги
5 571
Теперь перед каждым коммитом автоматически:
🟢 Форматируется код (Black) 🟢 Проверяется стиль (Flake8) 🟢 Удаляются лишние пробелы 🟢 Проверяются большие файлы8️⃣ GitHub Actions для CI/CD Создай
.github/workflows/test.yml:
name: Run Tests
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
pytest tests/
- name: Lint with flake8
run: |
pip install flake8
flake8 src/
👍Теперь при каждом PR автоматически запускаются тесты и проверки.
🧪 Бонус: как откатить ошибки
Отменить последний коммит (не запушен):
git reset --soft HEAD~1 # Сохранить изменения
git reset --hard HEAD~1 # Удалить изменения
Отменить изменения в файле:
git checkout -- filename.py
Вернуться к конкретному коммиту:
git log # Найди хеш коммита
git checkout <commit-hash>
Удалить файл из Git, но оставить локально:
git rm --cached secret.env
💡 Запомни:
⭐️ .gitignore — твоя первая линия защиты ⭐️ Секреты — только в .env, никогда в код ⭐️ Коммиты — осмысленные, не "asdasd" ⭐️ Ветки — для каждой фичи отдельно ⭐️ requirements.txt — с фиксированными версиями ⭐️ Pre-commit hooks — автоматизация спасает ⭐️ GitHub Actions — CI/CD из коробкиПрограммистика || #Статья
5 571
🐱 Git + Python: как не убить проект за 5 коммитов
Работаешь с Python? Используешь Git? Думаешь, что знаешь, как это делать правильно? Скорее всего, ты уже сделал несколько критических ошибок, которые вернутся к тебе через месяц.
🧱 Типичные ошибки питонистов в Git
👍 Коммитят `.pyc` файлы и `__pycache__/`:
git add .
git commit -m "fixed bug"
Результат: репозиторий загажен скомпилированными файлами, которые меняются при каждом запуске.
👍 Забывают `.env` и токены утекают в публичный репо:
API_KEY = "sk-123456789abcdef"
DATABASE_URL = "postgresql://user:pass@localhost/db"
Запушил — всё, твой ключ в руках ботов через 5 минут.
👍 Коммиты без смысла: "fix", "update", "asdasd", "final final FINAL v3"
Через неделю ты сам не помнишь, что там было.
👍 Не используют ветки — весь код в main:
Один баг — весь проект сломан. Откатить? А как?
👍 Гигантские коммиты на 50+ файлов:
git add .
git commit -m "added everything"
Найти, где именно появился баг — удачи.
📌 Как делать правильно
1️⃣ Правильный `.gitignore` для Python
Создай .gitignore в корне проекта:
# Байт-код Python
__pycache__/
*.py[cod]
*$py.class
*.so
# Виртуальные окружения
venv/
env/
ENV/
.venv
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# Переменные окружения и секреты
.env
.env.local
*.pem
*.key
# Логи
*.log
# Тестовые данные
.pytest_cache/
.coverage
htmlcov/
# Зависимости
*.egg-info/
dist/
build/
# Jupyter
.ipynb_checkpoints/
# Базы данных
*.db
*.sqlite3
# OS
.DS_Store
Thumbs.db
📎 Не хочешь писать руками?
➡️Используй
2️⃣ Храни секреты в `.env`, а не в коде
Вместо этого:
API_KEY = "sk-123456789" # НИКОГДА ТАК!
Делай так:
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("API_KEY")
Файл .env:
API_KEY=sk-123456789
DATABASE_URL=postgresql://user:pass@localhost/db
И ОБЯЗАТЕЛЬНО добавь .env в .gitignore!
3️⃣ Осмысленные коммиты
Плохо:
git commit -m "fix"
git commit -m "update"
git commit -m "aaaaa"
Хорошо:
git commit -m "fix: исправлена ошибка деления на ноль в calc.py"
git commit -m "feat: добавлена функция отправки email"
git commit -m "refactor: переписан парсер JSON для улучшения производительности"
Используй Conventional Commits:
- feat: — новая функция - fix: — исправление бага - refactor: — рефакторинг без изменения логики - docs: — изменение документации - test: — добавление тестов - chore: — рутинные задачи (обновление зависимостей и т.д.)4️⃣ Используй ветки Никогда не пиши в
main напрямую:
# Создаём ветку для новой фичи
git checkout -b feature/user-authentication
# Работаем, коммитим
git add auth.py
git commit -m "feat: добавлена аутентификация пользователей"
# Пушим ветку
git push -u origin feature/user-authentication
# Создаём Pull Request на GitHub
# Мержим только после ревью
5️⃣ Структура Python-проекта в Git
Правильная структура:
my-project/ ├── .git/ ├── .gitignore ├── .env.example # Шаблон для .env (БЕЗ реальных секретов) ├── README.md ├── requirements.txt # Зависимости ├── setup.py # Если пакет ├── src/ # Исходники │ ├── __init__.py │ ├── main.py │ └── utils.py ├── tests/ # Тесты │ ├── __init__.py │ └── test_main.py └── docs/ # Документация6️⃣ `requirements.txt` под контролем Фиксируй точные версии:
# Плохо (версии плавают)
requests
flask
# Хорошо (фиксированные версии)
pip freeze > requirements.txt
Результат requirements.txt:
requests==2.31.0 flask==3.0.0 python-dotenv==1.0.07️⃣ Pre-commit hooks — автоматизация проверок Установи
pre-commit:
pip install pre-commit
Создай .pre-commit-config.yaml:
repos:
- repo: https://github.com/psf/black
rev: 23.11.0
hooks:
- id: black
language_version: python3.11
- repo: https://github.com/pycqa/flake8
rev: 6.1.0
hooks:
- id: flake8
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
Активируй:
pre-commit install
Продолжение снизу⤵️
Программистика || #Статья5 571
30-летний я, который наконец-то нашёл работу джуном.
😎 Мой 19-летний тимлид узнаёт все мемы из канала «Программист». ⭐️
5 571
СИМВОЛ. Новогодние скидки до 12% в готовом квартале
Выбирайте квартиру с праздничной выгодой в квартале СИМВОЛ. Чтобы использовать все преимущества центра Москвы. И всюду успевать без спешки. И любоваться столицей из панорамных окон.
- Историчекий район Лефортово
- 2 км от Садового кольца
- Дома внутри ТТК
- 100+ открытых объектов инфраструктуры, в том числе Бауманский лицей
- В домах - фитнес, детские, переговорные, коворкинги
- Собственный парк "Зеленая река" площадью 10 га
- 3 станции метро в пешей доступности
Не пропустите новогодние скидки в готовом квартале. Спешите с покупкой, количество квартир ограничено!
Узнать больше
#реклама
simvol-kvartal.ru
О рекламодателе
5 571
🐈 Python для собеседования
Python востребован в разных отраслях. Это машинное обучение, искусственный интеллект, аналитика данных, создание программных продуктов и внутренних утилит. Очень часто Python идёт как дополнительный навык при требованиях в вакансии. Данный курс может дать быстрое представление о языке, что позволит проявить осведомлённость на собеседовании.
🌐 СсылкаПрограммистика || #Course
5 571
👩💻 bpytop — это современный инструмент мониторинга ресурсов, который работает на Linux, macOS и FreeBSD! Он отображает данные об использовании процессора, памяти, дисков, сети и запущенных процессов в удобном и визуально привлекательном интерфейсе. Написанный на Python, bpytop предлагает гибкие возможности настройки и легкость использования, включая полную поддержку управления с помощью мыши.🐱 Ссылка на GitHub Программистика || #Library
5 571
Кулинарные тренды начинаются здесь!
Food.ru — это медиа, где тренды в еде и стиле жизни создаете вы
Мы объединяем гурманов и тех, кто только начинает свой путь в кулинарии. Наша платформа поможет вам:
• Удивить близких вкусными блюдами
• Позаботиться о здоровье семьи
• Следить за КБЖУ легко и удобно
• Открывать новые рецепты каждый день
Присоединяйтесь к сообществу, где:
✨ Вы можете делиться своими кулинарными находками
✨ Находите единомышленников и друзей по вкусу
✨ Открываете новые идеи — от полезных рецептов до стильных решений для дома
Создавайте тренды вместе с Food.ru!❤️
Узнать больше
#реклама
food.ru
О рекламодателе
5 571
🔥 Логируй как профи: что не так с `print()` и как писать логи правильно
Логирование — это как чёрный ящик самолёта: пока всё работает, про него не думаешь. Но когда что-то ломается, без него — катастрофа.
И да,
print() — это не логирование, даже если вы очень его любите.
🧱 Почему не print()?
🟢 print() не умеет разделять уровни сообщений (ошибка или просто инфо) 🟢 Его нельзя легко перенаправить в файл или на удалённый сервер 🟢 В продакшене вы не сможете отследить проблему, если логи разбросаны по консоли📌 Базовое логирование
import logging
logging.basicConfig(level=logging.INFO)
logging.info("Приложение запущено")
📎 basicConfig быстро включит логирование, но на продакшене лучше задавать формат и место хранения.
🎯 Уровни логов
🟢 DEBUG — детальная отладка 🟢INFO — обычная информация 🟢 WARNING — что-то подозрительное 🟢ERROR — ошибка, но система ещё жива 🟢CRITICAL — всё очень плохо📦 Логи в файл
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s — %(levelname)s — %(message)s'
)
Теперь логи сохраняются в app.log с временем и уровнем.
🔄 Ротация логов
Чтобы файл логов не вырос до гигабайтов:
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('app.log', maxBytes=2_000_000, backupCount=5)
logging.basicConfig(
handlers=[handler],
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
📎 При достижении 2MB файл заменяется, и хранится 5 последних копий.
🧪 Логируем ошибки с трассировкой
try:
1 / 0
except ZeroDivisionError:
logging.exception("Ошибка деления на ноль")
➡️logging.exception() автоматически добавляет traceback в лог.
💡 Запомни:
🟢 Не логируй пароли и токены 🟢 Разделяй уровни — не пиши error там, где warning 🟢 Настрой логи под продакшен заранее, а не когда уже горит🗣 Если хотите пост про цветные логи, логирование в JSON или интеграцию с Sentry — пишите темы, мы с радостью сделаем! Программистика || #Статья
5 571
То, что доктор прописал!
9 самых необходимых IT-каналов, которые должен читать каждый айтишник:
Доктор Python — коды, хаки и фичи.
Доктор Techlogy — свежие технологии и их применение.
Доктор Cyber — информационная безопасность без скуки.
Доктор GitHub — лучшие репозитории от врача.
Доктор IT — всё о цифровом мире и его инсайтах.
Доктор GameDev — рецепты создания игр и гайды.
Доктор GPT — лучшие промпты и сервисы ИИ.
Доктор Memes — смех лечит лучше любых апдейтов.
Доктор C++ — фичи, советы и код без боли.
Подпишись, чтобы стать профессором, а не пациентом.
Available now! Telegram Research 2025 — the year's key insights 
