Zen of Python
20.1K subscribers
1.27K photos
173 videos
33 files
3.24K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Травма поколений в исполнении Python-комьюнити

#кек
@zen_of_python
😁1
Что такое линтер и что он делает

Линтер - это инструмент статического анализа кода, который проверяет ваш код на темы:
🔘 Синтаксис - правильно ли расставлены скобки, двоеточия;
🔘 Импорты - все ли импорты используются;
🔘 Переменные - все ли переменные определены;
🔘 Стиль - соответствие PEP 8;
🔘 Типы - если используется типизация.


Зачем запускать после изменений

⚡️ Обнаружение новых ошибок

# После добавления нового кода
def new_feature():
unused_var = "not used" # Линтер найдет неиспользуемую переменную
return "feature"


⚡️ Проверка совместимости

# После изменения импортов
from new_module import new_function
# Линтер проверит, существует ли new_function


⚡️ Соблюдение стандартов

# После рефакторинга
class MyClass:
def __init__(self):
self.very_long_attribute_name_that_should_be_shorter = None
# Линтер предложит сократить имя


⚡️ Проблемы безопасности

import subprocess
user_input = input("Enter command: ")
subprocess.run(user_input, shell=True) # Линтер предупредит о SQL injection


⚡️ Неэффективный код

# Неэффективно
my_list = []
for i in range(1000):
my_list.append(i)

# Линтер может предложить list comprehension
my_list = [i for i in range(1000)]


Настройка линтера
Обычно линтер настраивается через файлы конфигурации:


# pyproject.toml
[tool.ruff]
line-length = 88 # Максимальная длина строки
target-version = "py38" # Версия Python


Мы можем тонко настраивать, каким именно правилам следовать:

[tool.ruff.lint]
select = ["E", "F", "W", "C90", "I", "N", "UP", "YTT", "S", "BLE", "FBT", "B", "A", "COM", "C4", "DTZ", "T10", "EM", "EXE", "FA", "ISC", "ICN", "G", "INP", "PIE", "T20", "PYI", "PT", "Q", "RSE", "RET", "SLF", "SLOT", "SIM", "TID", "TCH", "INT", "ARG", "PTH", "TD", "FIX", "ERA", "PD", "PGH", "PL", "TRY", "FLY", "NPY", "AIR", "PERF", "FURB", "LOG", "RUF"]
ignore = ["E501", "S101", "PLR0913", "PLR0912", "PLR0915"]



Классические линтеры
🔘Pylint
🔘ruff
🔘Flake8
🔘mypy
🔘black

Пользователи Cursor, возможно, обратили внимание на завтозапуск линтера после практически каждого внесенного изменения. Эта IDE не отдает предпочтения какому-то конкретному инструменту, но запускает несколько из них.

Список правил ruff с детализацией в доках
#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
11
😊 Как организовать работу с данными, чтобы не утонуть в бюрократии?
😊 Какие подводные камни ждут при миграции всего банка в облако?
😊 Как силами NLP в 30 раз ускорить обработку клиентских обращений?

В гайдах для начинающих на такие вопросы вряд ли найдется ответ. А вот в телеграм-канале OTP Tech точно найдется наглядный разбор.

В OTP Tech вы получите реальный опыт внедрения сложных решений в продакшен крупного финтеха. Ну и просто фановый интерактив, который поможет разгрузить голову.

Если вы разрабатываете, проектируете или администрируете и хотите смотреть дальше хеллоу ворлдов — вам будет здесь интересно.

Присоединяйтесь: @otp_tech
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🌭1
Алгоритмы и структуры данных на Python

Уже ставшая классикой, книга от нескольких авторов поможет вам освоить алгоритмическое мышление. Помимо основ, вы познакомитесь с алгоритмами сортировки, поиска, деревьями, графами, динамическим программированием и жадными методами — всё написано с акцентом на Python-реализацию. Сильная сторона книги — реальные проекты: от простого калькулятора до системы обнаружения плагиата. Независимо от вашего уровня, вы найдёте в ней полезные идеи для укрепления навыков и расширения понимания алгоритмов.

#обучение
@zen_of_python
11
​​python-dateutil | datetime, который смог

Ультрапопулярное (если верить рейтингу PyPi) расширение стандартного модуля datetime, поддерживает:

— Вычисление «следующего X»: удобно находим даты следующего понедельника или последней недели месяца;
— Относительные дельты: вычисляем разницу между двумя датами не только в секундах, но и в понятных календарных единицах (например, «2 месяца и 5 дней»);
— Рекуррентные даты (повторяющиеся события)
Поддерживается генерация серий дат по очень гибким правилам, расширяющим стандарт iCalendar (например: «каждый второй вторник месяца до конца года») и многое другое.

Еще бы русский язык поддерживала, цены бы не было!

#инструмент
@zen_of_python
​​YTSage | Скачиватель с YouTube

Инструмент с несложным GUI на PySide6 c yt-dlp под капотом. Позволяет выбрать HD-качество, извлечь субтитры. Поддерживает скачивание плейлистов с возможностью выбрать конкретные видео перед загрузкой.

#инструмент
@zen_of_python
Forwarded from Типичный программист
Кратко о современном деплое: контейнеризация, оркестрация и непрерывная доставка для вашего приложения

Развёртывание: это процесс, при котором ваше приложение становится доступно для пользователей. Современный деплой использует инструменты и пайплайны для обеспечения стабильности, скорости и надежности. Ниже попытались разложить всё по полочкам 👇

Docker (Контейнеризация)
🔘 Представьте Docker как транспортный контейнер для софта.
🔘 Он упаковывает код, библиотеки и зависимости так, чтобы приложение одинаково работало в любой среде.
🔘 Плюсы: портативность, изоляция и одинаковое поведение в dev-, staging- и production-средах.


Kubernetes (Оркестрация)
🔘 Когда контейнеров становится много, нужен управляющий.
🔘 Kubernetes — это как портовая служба, которая управляет контейнерами: масштабирует, перезапускает, балансирует нагрузку.
🔘 Обеспечивает балансировку нагрузки, масштабирование, поэтапные обновления и самовосстановление контейнерных приложений.

CI/CD (Непрерывная интеграция и доставка)
🔘 CI — это как проверка каждого продукта перед отправкой с завода: тесты запускаются автоматически при каждом пуше кода.
🔘 CD — это система доставки: одобренные изменения автоматически едут в production.
🔘 Плюсы: более быстрые релизы, меньше багов, проще командная работа.

Аналогия

🔘 Docker — Запечатанная коробка с вашим товаром.
🔘 Kubernetes — Логистическая компания, которая организует и доставляет все коробки по назначению.
🔘 CI/CD — Конвейер, на котором коробки непрерывно отправляются дальше без задержек.
Please open Telegram to view this post
VIEW IN TELEGRAM
​​Пост для питонисток: история PyLadies

Но история сообщества Python — это не только код. Это ещё и путь к тому, чтобы люди разного пола и разного опыта могли почувствовать себя в нём своими. Одним из главных шагов в этом направлении стало появление PyLadies.

От футболки с надписью «Python is for girls» к первому шагу

На заре популярности Python о гендерном балансе в сообществе почти не задумывались. Даже сама Python Software Foundation (PSF), по словам одного из участников документального фильма, состояла «исключительно из белых мужчин».

Даже когда Гвидо ван Россум на одной из PyCon публично заявил, что в PSF нужны женщины, ситуация почти не сдвинулась. В кулуарах и списках рассылки обсуждали код, но не то, как привлечь к этому коду новые голоса.

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

Только когда сам Гвидо решился на личное участие, ситуация начала меняться. Он взял на себя роль ментора для разработчицы Мариатты Виджайа, которая сначала сомневалась, «достойна ли» просить о поддержке создателя языка. Менторство Гвидо помогло ей преодолеть барьер и в итоге стать одной из первых женщин — Python Core Developers.

Сегодня именно две женщины, включая Мариатту, входят в PSF. Порой, первым действовать должен начать глава.

PyLadies сегодня

Для крупных городов и даже целых стран начали создаваться локальные отделения: Pyadies Moscow, PyLadies Kazan, PyLadies Saint Petersburg. Только в этих сообществах, по мнению админа, сейчас как-то слишком тихо.

PyLadies не только увеличили долю женщин-спикеров на PyCon (с 1% в 2011 году до 40% в 2016-м), но и изменили саму культуру Python.

#факт
@zen_of_python
5🙉2😁1💅1
Что значит стрелка ->

Если вы столкнулись со знаком -> в коде на Python и задумались, а не код из R ли это нужно ли это, как это работает и откуда оно взялось, этот лонгрид ответит на такие вопросы.

Стрелка в определении функции служит для аннотации типа возвращаемого значения. Она ставится после списка параметров и перед двоеточием:


def count_titles(titles: list[str]) -> int:
return len(titles)


Здесь -> int говорит: «ожидается, что функция вернёт int». Аннотации опциональны и сами по себе ничего в рантайме не проверяют — это метаданные.


Краткая история оператора

Идея аннотаций функций впервые появилась в PEP 3107 (Function Annotations), который ввёл возможность добавлять произвольные метаданные к параметрам и к возвращаемому значению. На базе этой синтаксики PEP 484 затем ввёл систему типовых подсказок (type hints) для Python, сделав их стандартной практикой для тех, кто хочет статической проверки типов. Все эти дополнения остались опциональными — сам интерпретатор не будет выбрасывать ошибки, если аннотации не совпадают с фактическим типом во время выполнения.

Простой пример:


import random

def get_game_recommendation(titles: list[str]) -> str:
return random.choice(titles)

games = ["Minecraft", "Cyberpunk 2077", "The Witcher 3", "Elden Ring"]
recommendation = get_game_recommendation(games)
print(f"Рекомендуемая игра: {recommendation}") # Например, Minecraft
print(f"Тип возвращаемого значения: {type(recommendation).__name__}") # str



Что происходит, если функция возвращает другой тип?

Python сам по себе не будет проверять, совпадает ли реальный возвращаемый тип с аннотацией — код просто выполнится. Но когда вы используете статический анализатор типов (например, mypy) или линтер, несоответствие будет обнаружено и выведет предупреждение / ошибку. Это ключевая идея: аннотации дают выгоду при статической проверке, CI и чтении кода, но не изменяют семантику программы во время выполнения.


Какие типы можно указывать после ->?

Почти любые:
🔘 простые встроенные (int, str, bool),
🔘 коллекции (list[str], dict[str, int]),
🔘 собственные классы и проч.


Где ещё применяются стрелки и аннотации?

Хотя наиболее часто -> встречается в объявлениях функций, аннотации — это часть более широкой системы типизации в Python. Типы используются для:

🔘 аннотаций параметров функций;
🔘 переменных и атрибутов классов (PEP 526);
🔘 аннотаций методов, Callable, Protocol и т.д.;
🔘 документации и автодополнения в IDE.

Инструменты типа mypy, pyright, IDE (PyCharm, VS Code) и линтеры используют аннотации, чтобы находить ошибки и улучшать подсказки.


Ограничения и подводные камни

🔘 Аннотации не выполняются: они не гарантия корректности в рантайме;
🔘 Сложные типы для сложной структуры данных или динамических конструкций типы могут стать громоздкими; иногда приходится балансировать читабельность и строгость;

#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2