Zen of Python
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Mostrar más📈 Análisis del canal de Telegram Zen of Python
El canal Zen of Python (@zen_of_python) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 18 712 suscriptores, ocupando la posición 7 001 en la categoría Tecnologías y Aplicaciones y el puesto 35 195 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 18 712 suscriptores.
Según los últimos datos del 29 octubre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -99, y en las últimas 24 horas de -4, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.27%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 4.24% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 173 visualizaciones. En el primer día suele acumular 793 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 1.
- Intereses temáticos: El contenido se centra en temas clave como github, rust, pip, api, install.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 30 octubre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
def calculate_discount(items, discount):
return [item * (1 - discount) for item in items]
Всё работает, но не совсем понятно:
— Что именно items? Список? Кортеж? Генератор?
— Какой тип у discount?
— Что возвращает функция?
Код «самопроясняется», если добавить typing.List:
from typing import List
def calculate_discount(items: List[float], discount: float) -> List[float]:
return [item * (1 - discount) for item in items]
Мы можем пойти дальше. Зачем ограничивать функцию только List[float], если она также могла бы принять кортеж, множество или генератор?
from collections.abc import Iterable
def calculate_discount(items: Iterable[float], discount: float) -> List[float]:
return [item * (1 - discount) for item in items]
Теперь items — любая итерируемая структура: список, кортеж, генератор. Такой подход делает функцию более универсальной.
Это и есть главное преимущество Type Hints: они заставляют задуматься — а не слишком ли жёсткие ограничения я накладываю на входные данные? А не стоит ли сделать интерфейс функции более абстрактным?
Допустим, вы проектируете класс заказа. Если сначала использовали List для хранения товаров, то подумав о типах, вы можете заменить это на Set, чтобы избежать повторений. Или вместо хранения всех элементов в памяти начать использовать генератор для ленивой загрузки данных из базы.
Аннотации типов подталкивают вас к обобщённому проектированию, где функции и классы не зависят от конкретных реализаций.
Входы — как можно шире, выходы — как можно конкретнее.#основы @zen_of_python
mypy);
— работают без контекста задачи — поэтому «беспристрастны»;
#инструмент #основы
@zen_of_python__init__ в контексте dataclasses.
До Python 3.7 разработчикам приходилось вручную определять этот метод для инициализации атрибутов экземпляра класса. Например, чтобы создать объект 2DCoordinate(x=1, y=2), необходимо было явно прописать метод init с параметрами x и y. Альтернативы — фабричные функции и абстрактные классы, были менее удобны и приводили к усложнению кода.
С появлением «структур данных» необходимость в ручном определении __init__ для простых структур данных отпала:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
person = Person(name="Alice", age=30)
print(person)
Это не единственное решение: Создание объектов через фабричные методы позволяет (@classmethod) отделить логику инициализации от конструкции объекта.
Вот еще пример проблемы, вызванной пользовательским методом инициализации:
class FooBarWidget(FooWidget):
def __init__(self):
self.publisher = zmq.Context.instance().socket(zmq.PUSH)
self._init()
def _init(self):
def worker_thread_start():
FooWidget.__init__(self)
self.run()
worker_thread = Thread(target=worker_thread_start, daemon=True)
worker_thread.start()
Атрибуты, инициализируемые в FooWidget.__init__, могут быть недоступны в основном потоке до завершения инициализации в дочернем потоке, что вызывает ошибки при обращении к ним.
#основы
@zen_of_python.exe, пакет в Microsoft Store и NuGet-пакеты. PyManager объединяет их в один инструмент, упрощая процесс установки и управления версиями Python.
— Управление несколькими версиями
PyManager позволяет устанавливать и управлять несколькими версиями Python одновременно, включая возможность установки конкретных версий и архитектур (например, py install 3.11.4 --arch=arm64). Это особенно полезно для тестировщиков.
PEP-773
#факт
@zen_of_python