zen_of_python | Unsorted

Telegram-канал zen_of_python - Zen of Python

20070

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

Subscribe to a channel

Zen of Python

Онлайн-студия big tech night

Если вас не будет в Москве в день ивента, подключайтесь к нашей онлайн-студии. Мы подготовили огненную программу, которая отличается от офлайн-активностей:

🔴 Выступления спикеров от компаний-организаторов и других топов в индустрии
🔴 Микс форматов — от дискуссий и интервью до фановых историй из жизни разработчиков
🔴 Интерактивы с комментариями зрителей

Проведём сразу два прямых эфира:

Студия Hard
В формате дискуссий и интервью обсудим сложные темы — управление IT-командой, AI в разработке, запуск проектов на несколько бизнесов.

Студия Soft
Настоящая вечеринка в формате Late Night Show. Будем общаться, шутить и делиться сокровенным — например, обсудим необычные хобби и безумные pet-проекты.

❗️ Можно переключаться между студиями, чтобы поймать все самые интересные темы.

💻 Мы в эфире 12 сентября с 18:00 до 21:00

❤️Зарегистрируйтесь на сайте, чтобы получить ссылку на трансляцию

Подписывайтесь:
💬 big tech night

Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543

Это #партнёрский пост

Читать полностью…

Zen of Python

​​6 способов автоматизировать ревью кода — подборка сервисов

Если вы устали от ручного кода-ревью, в подборке Tproger вы найдете шесть действенных способов автоматизировать этот процесс. Среди тулов выделяется BeeCR, который интегрируется с GitLab. Также представлен Reshift — легковесный JavaScript-плагин, ориентированный на выявление уязвимостей ещё на этапе разработки.

#инструмент
@zen_of_python

Читать полностью…

Zen of Python

Mixins | Что это и как использовать

В ООП миксины — это инструмент, который позволяет переиспользовать общую функциональность между несколькими, часто несвязанными типами данных. Это шаг в сторону гибкого модульного кода с минимальной связностью похожих объектов.

В отличие от других ЯП (Ruby, Dart и проч.), которые поддерживают этот паттерн явно через специализированный синтаксис, Python полагается на множественное наследование как на механизм для реализации этой концепции.

Представьте, что вы создаете классы Animal и Vehicle с различными форматами данных. Реализация одной и той же функции serialize() приводит к дублированию кода:


# Плохо: Дублирование кода
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species

def serialize(self) -> dict:
return vars(self)

class Vehicle:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year

def serialize(self) -> dict: # Дублирование!
return vars(self)

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def serialize(self) -> dict: # Дублирование!
return vars(self)


Решение через примеси:


# Миксин обычно предоставляет одну конкретную функцию
class SerializableMixin:
def serialize(self) -> dict:
if hasattr(self, "__slots__"):
return {
name: getattr(self, name)
for name in self.__slots__
}
else:
return vars(self)

# Классы используют mixin без странной иерархии
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species

class Vehicle:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

# Применяем mixin к нужным классам
class SerializableAnimal(Animal, SerializableMixin):
pass

class SerializableVehicle(Vehicle, SerializableMixin):
pass

class SerializablePerson(Person, SerializableMixin):
pass



Когда использовать Mixins

1️⃣ Когда нужно переиспользовать функциональность между несвязанными классами
2️⃣ Когда нужно создать модульный и композируемый код
3️⃣ Когда нужно расширить функциональность сторонних библиотек


Когда НЕ стоит использовать Mixins

1️⃣ Когда функциональность специфична для одного класса
2️⃣ Когда создается слишком сложная иерархия наследования

#основы
@zen_of_python
🤓 — Если изучил досконально

Читать полностью…

Zen of Python

Omnara | Центр управления полетами для ваших ИИ-копайлотов

Платформа для мониторинга и управления ИИ-агентами (такими как Claude Code, Cursor и другими), которая позволяет отслеживать их работу в реальном времени и получать уведомления, когда агенты нуждаются в помощи. Инструмент работает как в веб-версии, так и в мобильном приложении. Также реализованы REST API, Python SDK и MCP (Model Context Protocol). Такой тул позволяет вам настроить своих AI-заместителей и больше времени проводить за нерутинными задачами.

Цена: бесплатно (но за токены придется платить)
Доступен в РФ: да
@zen_of_python

Читать полностью…

Zen of Python

Линейка в доме питониста никогда не покрывается пылью 🙂
#кек
@zen_of_python

Читать полностью…

Zen of Python

Мотивация зрелого разработчика
#кек
@zen_of_python

Читать полностью…

Zen of Python

Многофакторное сравнение пяти популярных вычислительных движков Big Data

На Tproger сравнили Spark, Presto/Trino, ClickHouse и StarRocks — с оценкой по таким критериям, как скорость, масштабируемость, кэширование, отказоустойчивость и поддержка SQL / Python.

Выделено три типа движков:
— универсальные (например, Spark, Flink, MapReduce), предназначенные для пакетных сложных вычислений; — интерактивные, для запросов (Presto, Trino) для моментального анализа ad hoc;
— аналитические, ориентированные на OLAP-аналитику с векторизацией.

Используется система скоринга Metascore, которая облегчит сравнение и принятие обоснованного решения.

#инструмент
@zen_of_python

Читать полностью…

Zen of Python

Мы писали ранее, что 12 сентября пройдёт big tech night. Событие придумали в Яндексе и организовали вместе со Сбером, X5, Т-Банком и Lamoda. Впервые топовые IT-компании одновременно откроют двери офисов в Москве с 18:00 до 00:00 и покажут специалистам, где рождаются технологии.

Пора рассказать о тех, кто выйдет на сцену⚡️

📣 Кто и о чём расскажет на big tech night? Начинаем представлять спикеров и темы. Читайте на карточках.

➡️ А подробнее про доклады рассказываем на сайте

Подписывайтесь:
💬 big tech night

Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543

Читать полностью…

Zen of Python

@pytest.mark.parametrize: Как параметризировать тесты

Тестирование кода может быть утомительным процессом. Когда у вас есть множество похожих тестовых случаев, написание отдельных функций для каждого часто приводит к дублированию кода. Именно здесь на помощь приходит функция @pytest.mark.parametrize.

Начнем с простого примера. У нас есть функция add_nums(), которая складывает числа из списка:


def add_nums(numbers):
return sum(numbers)


Без parametrize тесты могли бы выглядеть так:


def test_123():
assert add_nums([1, 2, 3]) == 6

def test_negatives():
assert add_nums([1, 2, -3]) == 0

def test_empty():
assert add_nums([]) == 0


Что не так с этим подходом? Дублирование кода: каждая тестовая функция повторяет одну и ту же структуру. Вместо написания трех отдельных функций, мы можем создать одну параметризованную функцию:


import pytest

@pytest.mark.parametrize(
"nums, expected_total",
[
([1, 2, 3], 6),
([1, 2, -3], 0),
([], 0),
]
)
def test_add_nums(nums, expected_total):
assert add_nums(nums) == expected_total


1. @pytest.mark.parametrize — это специальный декоратор pytest
2. Параметры "nums, expected_total" — имена параметров функции
3. Тестовые данные — список кортежей, где каждый содержит значения для одного теста

Pytest автоматически вызывает вашу функцию с каждым набором параметров:


# Первый вызов
test_add_nums([1, 2, 3], 6)

# Второй вызов
test_add_nums([1, 2, -3], 0)

# Третий вызов
test_add_nums([], 0)


Результат: 3 отдельных теста, каждый из которых может пройти или упасть.


Кастомные ID для тестов

По умолчанию pytest генерирует автоматические ID для тестов, но они могут быть не очень понятными. Вы можете задать свои:


@pytest.mark.parametrize(
"nums, expected_total",
[
([1, 2, 3], 6),
([1, 2, -3], 0),
([], 0),
],
ids=["positive_numbers", "mixed_numbers", "empty_list"]
)
def test_add_nums(nums, expected_total):
assert add_nums(nums) == expected_total


Теперь при запуске тестов вы увидите:

test_add_nums[positive_numbers] PASSED
test_add_nums[mixed_numbers] PASSED
test_add_nums[empty_list] PASSED



Вложенная параметризация

Можно комбинировать несколько параметризаций:


@pytest.mark.parametrize("x", [1, 2, 3])
@pytest.mark.parametrize("y", [10, 20])
def test_multiply(x, y):
assert x * y == x * y


Это создаст 6 тестов: (1,10), (1,20), (2,10), (2,20), (3,10), (3,20).

#основы
@zen_of_python

Читать полностью…

Zen of Python

Вопрос подписчика: IDE + GPT

Задает @vberia:

«Какие IDE и какие GPT сейчас актуальны? Можно топ 3? Не хочется тестировать лишнего, но хочется протестить нужные)».

NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.

#вопросы_подписчиков
@zen_of_python

Читать полностью…

Zen of Python

tyro | Ваша функция, вызываемая в CLI

tyro.cli() автоматически преобразует Python-функцию или класс с аннотациями типов в полнофункциональный интерфейс командной строки, без необходимости вручную прописывать парсинг аргументов:


@dataclass
class Config:
input_file: str
verbose: bool = False


Здесь tyro.cli(Config) создаёт полноценный CLI, где аргументы --input-file и --verbose будут автоматически сгенерированы, а при вызове в терминале доступна помощь (--help).

Утилита извлекает аннотации и doc-строки. Аргументы становятся типами, которыми оперируют IDE и анализаторы mypy, pyright: автодополнение, переход к определению, рефакторинг — всё работает «из коробки». Это даст возможность автокомплитить с Tab.

#инструмент
@zen_of_python

Читать полностью…

Zen of Python

complexipy | Вычисляем когнитивную сложность вашего кода

Нетривиальный инструмент, позволяющий вычислить Cognitive Complexity («когнитивную сложность»). В контексте программирования это метрика, оценивающая насколько трудно человеку понять код — учитываются не только ветвления и циклы, как в Cyclomatic Complexity, но и структура, глубина вложенности, логические конструкции, операторы и прочие аспекты, создающие когнитивную нагрузку при чтении. Это важная метрика при рефакторинге проекта.

Тул интегрируется через CLI, GitHub Actions, pre-commit-hooks и позволяет анализировать функции, файлы и директории, указывая те, чей коэффициент сложности превышает определенный порог.

#инструмент
@zen_of_python
💔 — Если рефакторинг разбивает сердце

Читать полностью…

Zen of Python

#кек
@zen_of_python

Читать полностью…

Zen of Python

Полезный мем: переменные или методы, имена которых начинаются с двойного подчёркивания (например, __x), автоматически «искажаются» интерпретатором путём добавления имени класса в начало. Это делается для обеспечения некоторой степени инкапсуляции и предотвращения конфликтов имён в классах-наследниках.

«Приватные» переменные с двойным одчёркиванием на самом деле претерпевают трансформацию имени (Name Mangling).

#кек #факт
@zen_of_python

Читать полностью…

Zen of Python

Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

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

#вопросы_новичков
@zen_of_python

Читать полностью…

Zen of Python

Python в 2025 году: исследование Python Software Foundation

Восьмой ежегодный опрос разработчиков Python, проведённый создателями языка и командой PyCharm, собрал более 30 000 ответов.

И вот интересные факты на его базе:
— Python остаётся основным языком для своих пользователей. В отличие от многих других языков, 86 % респондентов используют Python как основной язык программирования;

— Половина сообщества — новички. Интересно, что 50 % опрошенных имеют менее двух лет профессионального опыта в программировании, а 39 % — менее двух лет опыта работы с Python;

— доля респондентов, использующих FastAPI, выросла с 29 до 38%;

— Менеджер пакетов uv становится новым стандартом из-за скорости;

— Использование GPT через Hugging Face Transformers позволяет легко интегрировать ИИ в проекты.

#факт
@zen_of_python

Читать полностью…

Zen of Python

Маск тихо представил Grok Code и сделал его частью Cursor

Ночью xAI тихо выкатили новую модель Grok Code — гибрид на 37B активных параметров, специально обученный под кодинг.

Контекстное окно — внушительные 262K токенов.

До релиза модель пряталась под именем «sonic». Те, кто уже успел попробовать новинку, отмечают: работает быстро и точно, хотя официальных бенчей пока нет.

Самое приятное — попробовать Grok Code можно прямо сейчас в Cursor и Opencode. Причем до 2 сентября это бесплатно.

@your_tech

Читать полностью…

Zen of Python

Паттерн Flyweight | как экономить память и избегать дублирования кода

Flyweight («вес мухи») — один из структурных паттернов, предназначенный для оптимизации расходования памяти. Суть — разделять состояния объектов на:

➡️ Внутреннее (intrinsic): общие, неизменяемые компоненты, которые можно разделять между объектами;
➡️ Внешнее (extrinsic) — уникальные, изменяемые данные, передаваемые в объект лишь в контексте его использования.

Это позволяет хранить меньше объектов при одинаковом поведении. Стоит задуматься об этом паттерне, если требуется создать множество объектов с частично общими данными.

Пример
Представь, что у нас лес в игре из 100К деревьев. У каждого дерева есть:

— Внутреннее состояние: текстура, цвет листвы, форма кроны, высота модели. Это разделяемые каждым деревом в лесу свойства;
— Внешнее состояние: координаты на карте, текущее состояние (здорово/повалено). Такое уникально для каждого дерева.

Если бы мы для каждого дерева хранили копию текстуры и модели, мы бы потратили гигабайты памяти. Flyweight избавляет от проблемы:


Наивный вариант (без Flyweight)


class Tree:
def __init__(self, texture, color, shape, x, y):
self.texture = texture
self.color = color
self.shape = shape
self.x = x
self.y = y

def draw(self):
print(f"Drawing {self.color} {self.shape} at ({self.x}, {self.y})")


# создаём 100.000 деревьев, каждое хранит одинаковую текстуру и форму
forest = [
Tree("oak_texture.png", "green", "oak", x, y)
for x, y in zip(range(1000), range(1000))
]


Каждый объект Tree хранит одинаковые данные (oak_texture.png, "oak", "green"), хотя это лишнее.


С Flyweight


# Общие характеристики
class TreeType:
def __init__(self, texture, color, shape):
self.texture = texture
self.color = color
self.shape = shape

def draw(self, x, y):
# внешние данные передаются параметром
print(f"Drawing {self.color} {self.shape} at ({x}, {y})")


# Фабрика для переиспользования типов деревьев
class TreeFactory:
_tree_types = {}

@classmethod
def get_tree_type(cls, texture, color, shape):
key = (texture, color, shape)
if key not in cls._tree_types:
cls._tree_types[key] = TreeType(texture, color, shape)
return cls._tree_types[key]


# Контекст: хранит только уникальные данные (extrinsic)
class Tree:
def __init__(self, x, y, tree_type):
self.x = x
self.y = y
self.tree_type = tree_type

def draw(self):
self.tree_type.draw(self.x, self.y)


# создаём 100ю000 деревьев, но реально разных TreeType всего 2-3
forest = []
for i in range(100000):
if i % 2 == 0:
tree_type = TreeFactory.get_tree_type("oak_texture.png", "green", "oak")
else:
tree_type = TreeFactory.get_tree_type("pine_texture.png", "darkgreen", "pine")
forest.append(Tree(i, i * 2, tree_type))

# Нарисуем первые пять
for tree in forest[:5]:
tree.draw()


⚡️ У нас 100 000 объектов Tree, но всего 2 объекта `TreeType` (oak и pine). Экономия памяти огромная: вместо хранения 100.000 текстур хранится только 2.


Недостатки паттерна

— Усложнение структуры кода;
— Возможны сложности с сопровождением, особенно при неправильном управлении extrinsic;
— Повышен риск связности — общие объекты могут влиять на многие части системы .

#основы
@zen_of_python

Читать полностью…

Zen of Python

Получается нас уже заменили?

#постИИрония

Читать полностью…

Zen of Python

Tproger объединились с Paradox и запустили совместный проект для комьюнити разработчиков
 
Мы сделали два дизайна — теперь ваш ход. Вы за типичный или за токсичный вайб? Голосуйте за один из вариантов до 30 августа на сайте.
 
В конце месяца объявим победителя — дизайн, который сообщество реально протащило в прод.
 
И да, всё самое интересное будет в канале. Среди голосующих разыграем призы — так что не только банке достанется апгрейд.

Читать полностью…

Zen of Python

Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

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

#вопросы_новичков
@zen_of_python

Читать полностью…

Zen of Python

Инструкция к Kubernetes, которую поймёт даже водитель Uber

Если ваша резиновая уточка уже освоила все популярные технологии, то пора искать новую жертву. Сможете рассказать о сложном так, чтобы вас понял даже далёкий от IT водитель такси?

Автор этого материала смог и поделился своим результатом. Если вы всё ещё не до конца понимаете кубер, то скорее читайте статью:

https://dev.to/therubberduckiee/explaining-kubernetes-to-my-uber-driver-4f60

Читать полностью…

Zen of Python

Что такое магистратура для инженеров данных и почему сейчас — лучшее время поступать

На Tproger рассказали, почему именно сейчас — лучший момент, чтобы выучиться на инженера данных. Программа магистратуры от НИУ ВШЭ совместно с Нетологией даёт официальный государственный диплом, а также дополнительный профессиональный сертификат. Обучение строится на практике: студенты накапливают портфолио через учебные проекты, хакатоны и стажировки у партнёров программы, а завершают его выпускной квалификационной работой, которая может быть исследовательской или корпоративной. Вы получите навыки работы с Python, SQL, Java, Hadoop, Airflow, Docker, Yandex Cloud, ClickHouse, PostgreSQL и сможете строить эффективные пайплайны. Есть очный и удаленный форматы.

#обучение
@zen_of_python

Читать полностью…

Zen of Python

Где арендовать GPU в 2025: подборка GPU‑хостингов с адекватной ценой и SLA

В 2025 году аренда видеокарт в облаке становится всё более актуальной альтернативой покупке собственного оборудования. В обзоре представили подборку провайдеров, которые предлагают топовые видеокарты — от NVIDIA V100 и A40 до мощнейших H100 и A100 для создания кластеров до 8 GPU. Многие из них предоставляют фичу — поминутную / почасовую оплату (pay-as-you-go), что делает такое железо доступным физлицам. Например, на VK Cloud предлагаются GPU L4, Tesla V100 и A100 для задач от видеообработки до глубокого обучения, а Cloud.ru предлагает H100, A100, V100 и A40 с возможностью формирования мощных кластеров.

#факт
@zen_of_python

Читать полностью…

Zen of Python

Прямой эфир с ментором по Python Сергеем Филичкиным

Забивайте слот в календаре:
📌 19 августа, 18:00 — Сергей Филичкин проведёт бесплатную открытую консультацию в «Коде найма».

Тему этого эфира помогли выбрать вы! Будем разбирать, «Как собирать офферы «про запас» и торговаться за лучшую цену». А вот более подробный план встречи:

🖇Как грамотно позиционировать себя на рынке, чтобы получить больше предложений.
🖇Психология успеха в переговорах: как уверенно говорить о деньгах.
🖇Тактика сбора офферов и ведения торгов.
🖇Лайфхаки по автоматизации поиска и переписки с рекрутерами.
🖇Блок Q&A с разбором ваших ситуаций.

💬 Оставляйте свои вопросы Сергею под этим постом — чтобы наш ментор дал развернутые и действительно рабочие советы!

Python-карьера в 2025 без воды: деньги, офферы, переговоры. Подписывайся.

ИП Филичкин Сергей Андреевич ИНН 183401586208, erid: 2W5zFJydiRE

Читать полностью…

Zen of Python

Квиз: какой ты магистр информационных технологий

Собрали для вас интерактивный приключенческий квест с сеттингом футуристичного города инженеров. Всего пару минут и вы узнаете, какая магистерская программа точно будет вам по духу.

Сохраняйте: https://tprg.ru/YGcC

Читать полностью…

Zen of Python

#кек
@zen_of_python

Читать полностью…

Zen of Python

Когда хотел просто поиграть, но случайно спас марсианскую базу…

Go-разработчики, ваш выход! Вместе с «МойОфис» сделали игру, в которой нужно проявить все свои знания в Go. Решите задачи и помогите главным героям спасти марсианских колонизаторов.

P.S. Первые 10 игроков с максимальным результатом за минимальное время получат подарки от «МойОфис».

Вперёд, времени почти нет: https://tprg.ru/sZEq

Реклама

Читать полностью…

Zen of Python

while True

#кек
@zen_of_python

Читать полностью…

Zen of Python

fastapi_mcp | Ваш самописный API как инструмент LLM

Если вы обладаете самописным API и хотите, чтобы LLM умела им пользоваться, то эта библиотека поможет. За несколько строк кода вы сможете выдать функционал своего проекта нейронкам вроде ChatGPT по эндпоинту https://app.base.url/mcp:


from fastapi import FastAPI
from fastapi_mcp import FastApiMCP

app = FastAPI()

mcp = FastApiMCP(app)

# Mount the MCP server directly to your FastAPI app
mcp.mount()


#инструмент
@zen_of_python

Читать полностью…
Subscribe to a channel