fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

Zen of Python

Zen of Python

رفتن به کانال در Telegram

Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

نمایش بیشتر

📈 تحلیل کانال تلگرام Zen of Python

کانال Zen of Python (@zen_of_python) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 18 718 مشترک است و جایگاه 7 007 را در دسته فناوری و برنامه‌ها و رتبه 35 217 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 18 718 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 28 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -100 و در ۲۴ ساعت گذشته برابر -10 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 6.22% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 4.24% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 1 165 بازدید دریافت می‌کند. در اولین روز معمولاً 793 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 1 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند github, rust, pip, api, install تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
“Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL”

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 29 اکتبر, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

18 718
مشترکین
-1024 ساعت
-467 روز
-10030 روز
آرشیو پست ها
Что такое линтер и что он делает Линтер - это инструмент статического анализа кода, который проверяет ваш код на темы: 🔘 Синтаксис - правильно ли расставлены скобки, двоеточия; 🔘 Импорты - все ли импорты используются; 🔘 Переменные - все ли переменные определены; 🔘 Стиль - соответствие 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

Травма поколений в исполнении Python-комьюнити #кек @zen_of_python
Травма поколений в исполнении Python-комьюнити #кек @zen_of_python

Лимитка для комьюнити выходит в прод! Успей залететь в розыгрыш Уже скоро День программиста, и к этому моменту наш безалкогольный IPA будет разлит! Вы выбрали название и концепт упаковки, а наши коллеги по коллабу из Paradox уже отдали этикетки в печать. И пока мы с вами ожидаем релиза, запускаем специальный розыгрыш. Победитель получит коробку «ТОКСИЧНЫЙ ПРОГРАММИСТ» с шестью банками. Подробнее с правилами вы можете ознакомиться здесь. Для участия достаточно: — быть подписанным на @tproger и @paradox_beer; — оставить реакцию и любой комментарий под этим постом; — нажать кнопку «Участвую». Итоги подведём 15 сентября. Победителя выберем с помощью бота. Всем удачи! Участников: 154 Призовых мест: 1 Дата розыгрыша: 18:00, 15.09.2025 MSK (3 дня)

Когда вынужден работать с несколькими версиями Python в своих проектах #кек @zen_of_python

А может ну это всё и улететь работать в космос? На станцию Контур активно ищут новобранцев. Берут тех, кто разбирается в прог
А может ну это всё и улететь работать в космос? На станцию Контур активно ищут новобранцев. Берут тех, кто разбирается в программировании, тестировании, UX-исследованиях и аналитике. Запускайте бота и проходите миссии. В конце — розыгрыш целого бокса с космическим мерчем! 🚀Стажировка уже началась. Вперёд!

Repost from IT Юмор
Надо ещё добавить пару строк с комментами для количества @ithumor
Надо ещё добавить пару строк с комментами для количества @ithumor

Новый синтаксис Python от Grok #кек @zen_of_python
Новый синтаксис Python от Grok #кек @zen_of_python

Всем тимлидам, разработчикам, тестировщикам и админам! Счастливого Дня программиста! Желаем вам всегда зелёных билдов, отзывч
Всем тимлидам, разработчикам, тестировщикам и админам! Счастливого Дня программиста! Желаем вам всегда зелёных билдов, отзывчивых кластеров и тихих дежурных смен. Пусть ваши логи будут чисты от ошибок, а мониторинг предупреждает о проблемах раньше, чем о них узнают пользователи. И чтобы пожелание точно сбылось, обязательно воспользуйтесь подарками из нашей IT-коробки. Готовили с любовью в сердце вместе с нашими друзьями. С праздником!

Вопросы подписчиков Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает: — Спрашивайте
Вопросы подписчиков Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает: — Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов! — Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте. #обсуждение @zen_of_python

alive-progress | Шкала прогресса в CLI Библиотека, предназначенная для создания динамичных индикаторов прогресса в CLI. Среди фичей: — плавная анимация спиннера; — точный расчет оставшегося времени с использованием алгоритма экспоненциального сглаживания; —хуки для логирования. #инструмент #dataviz @zen_of_python

Зовём на 2ХАКАТОН от 2ГИС 4–5 октября, офлайн, Москва Два дня, чтобы общаться, кодить, вдохновляться и менять городские сервисы к лучшему! Три трека: городские данные с ЦОДД, инклюзия с фондами «Антон тут рядом», «Продвижение», «ЛизаАлерт» и носимые устройства — часы, браслеты, AR и другие гаджеты. Призовой фонд: 1 000 000 рублей и шанс, что проект попадёт прямо в 2ГИС! Регистрируйся с командой от 3 до 6 человек или соло — поможем найти команду в чате! #Реклама О Рекламодателе

​​Hypothesis подумает о пограничных случаях за вас Библиотека property-based тестирования, где вместо ручного набора тест-кейсов вы описываете свойства, которым должен соответствовать код, а разнообразные данные генерируются и проверяются автоматически, включая граничные случаи. При обнаружении сбоя Hypothesis не просто сигнализирует об ошибке — он возвращает наиболее простой пример, приводящий к сбою, что значительно облегчает отладку. #инструмент @zen_of_python

​​Вопрос подписчика Задает @mozmoroz: «Какие платные курсы с куратором можете посоветовать по питону для получения базы знаний с пониманием что такое питон и цикл if? Возраст 15 лет» NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике. #обсуждение @zen_of_python

Альфа-Банк приглашает IT-специалистов на турнир по спортивному хакингу AlfaCTF — он пройдёт 13-14 сентября Разработчики, тест
Альфа-Банк приглашает IT-специалистов на турнир по спортивному хакингу AlfaCTF — он пройдёт 13-14 сентября Разработчики, тестировщики и аналитики будут решать таски: взламывать, находить уязвимости, собирать флаги и бороться за звание лучшего хакера. 🤓🤓🤓🤓🤓🤓🤓🤓 🤓🤓🤓🤓🤓🤓🤓🤓 🤓🤓🤓🤓🤓🤓🤓🤓 🤓🤓🤓🤓🤓🤓🤓🤓 🤓🤓🤓🤓🤓🤓🤓🤓 🤓🤓🤓🤓🤓🤓🤓🤓 🤓🤓🤓🤓🤓🤓🤓🤓 Всего три уровня сложности, есть и простой для студентов. Команды-победители получат до 450 тысяч рублей. Собрать команду и зарегаться нужно на сайте. Для разминки найдите баг на картинке: Это #партнёрский пост

Этот код демонстрирует: 🔘 короткое замыкание (401 и 429 останавливают конвейер); 🔘 прохождение запроса дальше при None; 🔘 терминальный обработчик 404. Политики прохождения запроса 🔘 Short-circuit (рекомендуется по умолчанию): первый, кто вернул результат, «закрывает» цепочку; 🔘 Fall-through: все обработчики обязаны отработать (например, аудит/метрики/логирование), результат — агрегация; 🔘 Микс: часть «жёстких» (аутентификация, лимиты) — short-circuit; «мягкие» (логирование) — всегда проходят. #основы @zen_of_python

Цепочка обязанностей Цепочка обязанностей (Chain of Responsibility, CoR) — поведенческий паттерн, который пропускает запрос через последовательность обработчиков, пока один из них не возьмётся за дело (или пока цепочка не закончится). Этот подход «развязывает» отправителя и получателей запроса: отправителю не нужно знать, кто именно обработает задачу, а обработчики остаются взаимозаменяемыми и настраиваемыми в рантайме. Используйте CoR, если: 🔘 обработка запроса может зависеть от набора условий/правил, которые меняются со временем; 🔘 нужно включать / выключать шаги обработки без переписывания вызвавшего кода; 🔘 часть запросов может обрабатываться на ранних шагах, а остальные — «прокатываться» дальше; 🔘 вы строите конвейер: фильтры, middleware, валидаторы, пост-обработчики. Минимальный состав паттерна 🔘 Handler (интерфейс / абстракция): объявляет метод handle(request) и хранит ссылку на «следующего»; 🔘 ConcreteHandler: решает, обрабатывать ли запрос, либо передаёт дальше; 🔘 Client: строит цепочку и отправляет запрос первому звену. Пример

from __future__ import annotations
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Optional, Any, Callable


class Handler(ABC):
    def __init__(self, nxt: Optional["Handler"] = None):
        self._next = nxt

    def set_next(self, nxt: "Handler") -> "Handler":
        self._next = nxt
        return nxt  # позволяет строить цепочку «в линию»

    def handle(self, request: Any) -> Any:
        # Базовая реализация: попытаться обработать здесь,
        # иначе передать дальше.
        result = self._handle_here(request)
        if result is not None:
            return result
        if self._next:
            return self._next.handle(request)
        return None  # никто не справился

    @abstractmethod
    def _handle_here(self, request: Any) -> Optional[Any]:
        ...


@dataclass
class HttpRequest:
    path: str
    headers: dict
    user_id: Optional[int] = None
    payload: Optional[dict] = None


class AuthHandler(Handler):
    def _handle_here(self, req: HttpRequest) -> Optional[Any]:
        token = req.headers.get("Authorization")
        if not token:
            # Нет токена — «решение на месте»: отклоняем и НЕ передаём дальше
            return {"status": 401, "message": "Unauthorized"}
        # валидируем (упростим) и ставим идентификатор
        req.user_id = 42
        return None  # пропускаем дальше


class RateLimitHandler(Handler):
    def __init__(self, check: Callable[[HttpRequest], bool], nxt: Optional[Handler] = None):
        super().__init__(nxt)
        self.check = check

    def _handle_here(self, req: HttpRequest) -> Optional[Any]:
        if not self.check(req):
            return {"status": 429, "message": "Too Many Requests"}
        return None


class RouterHandler(Handler):
    def _handle_here(self, req: HttpRequest) -> Optional[Any]:
        if req.path == "/me" and req.user_id:
            return {"status": 200, "data": {"id": req.user_id}}
        if req.path == "/ping":
            return {"status": 200, "data": "pong"}
        # Не мой маршрут — пропускаю дальше (если есть)
        return None


class NotFoundHandler(Handler):
    def _handle_here(self, req: HttpRequest) -> Optional[Any]:
        # Терминальный обработчик: если дошли сюда — 404
        return {"status": 404, "message": f"Route {req.path} not found"}


# Сборка цепочки
def build_pipeline() -> Handler:
    auth = AuthHandler()
    rate = RateLimitHandler(check=lambda r: True)
    router = RouterHandler()
    notfound = NotFoundHandler()

    auth.set_next(rate).set_next(router).set_next(notfound)
    return auth


if __name__ == "__main__":
    pipeline = build_pipeline()
    print(pipeline.handle(HttpRequest(path="/ping", headers={"Authorization": "Bearer x"})))
    print(pipeline.handle(HttpRequest(path="/me", headers={"Authorization": "ok"})))
    print(pipeline.handle(HttpRequest(path="/unknown", headers={"Authorization": "ok"})))
    print(pipeline.handle(HttpRequest(path="/ping", headers={})))

CodeViz: бесплатное дополнение для VS Code, превращающее код в интерактивную карту 😬 Плагин строит визуальную структурированную карту вашего кода прямо в IDE. Можно наглядно увидеть архитектуру проекта, связи между файлами и понять его суть. Поддерживается масса яп, всё работает быстро и абсолютно бесплатно. Сохраняйте.

AI Journey Contest 2025: Брось вызов задачам уровня профи в мире ИИ! Участвуй в международном онлайн-соревновании по ИИ и пол
AI Journey Contest 2025: Брось вызов задачам уровня профи в мире ИИ!   Участвуй в международном онлайн-соревновании по ИИ и получи возможность побороться за денежный приз! Призовой фонд — 6,5 млн рублей!   Выбери один или несколько треков: • Agent-as-Judge — универсальный «судья», способный оценивать ИИ-тексты.   • Human-centered AI Assistant — персонализированный ассистент на основе GigaChat, имитирующий поведение людей и способный предугадать их предпочтения. Бонус: Участникам предоставляются токены для API + возможность получить дополнительно 1 млн токенов!   • GigaMemory — механизм долговременной памяти для LLM, помогающий ассистенту запоминать и использовать важные факты в диалоге.   Не упусти возможность не только прокачать свои скиллы, получить заветную строчку в списке своих достижений и выиграть солидный приз, но и заявить о себе на AI Journey — главной международной конференции по ИИ в России!   Соревнование проходит до 30 октября. Регистрируйся и участвуй Это #партнёрский пост

Вопрос подписчика Задает @StSav012: «Предлагаю задачку на алгоритм. Для данных n ∈ ℕ и чётного N ≥ n > 1, N ∈ ℕ, найти чётное ñ, ближайшее к n, являющееся делителем N. Если таких чисел несколько, выбрать наибольшее.Конечно, хочется скорость O(log(n)).

def find_closest_even_divisor(n: int, max_n: int) -> int:
    """
    For given n ∈ ℕ and an even N ≥ n, N ∈ ℕ,
    find an even ñ closest to n so that ñ is a divisor of N.

    If there are several such numbers, pick the largest one.
    """

    if max_n <= 0:
        raise ValueError(f"There are no positive divisors for {max_n}")
    if max_n & 1:
        raise ValueError(f"There are no even divisors for {max_n}, which is odd")

    if n > 0.75 * max_n:
        return max_n

    if max_n % n == 0 and n & 1 == 0:
        return n

    divisors: list[int] = []
    dd: int = 1
    while max_n > 1 and max_n & 1 == 0:
        max_n >>= 1
        dd <<= 1
        divisors.append(dd)

    d: int = 3
    dc: list[int]
    while max_n > 1:
        dc = []
        dd = 1
        while max_n % d == 0:
            max_n //= d
            dd *= d
            dc.append(dd)
        else:
            if dc:
                divisors += [divisor * dd for divisor in divisors for dd in dc]
            if d < isqrt(max_n) and d < 2 * n:
                d += 2
            else:
                break

    return min(divisors, key=lambda _d: (abs(n - _d), -_d))
Что ещё можно ускорить?» NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике. #обсуждение @zen_of_python