20070
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Питонистам позалипать на вечер: вышла документалка про Python 🖥
История о том, как скромный проект из Амстердама 90-х превратился в движок для AI, дата-сайенса и топовых IT-компаний. За 90 минут документалка охватывает всё: первые коммиты, сомнения в будущем, почти забвение — и путь к славе.
В фильме — интервью с Гвидо ван Россумом, Трэвисом Олифантом (создатель NumPy), Барри Варшавом и другими ведущими разработчиками. Они делятся закулисьем жизни Python, моментами разногласий и тем, как язык стал незаменимым… ну, реально для всего.
Еще одна схема мошенничества на PyPi: освободившиеся домены
PyPI усиливает защиту аккаунтов от атак через «возрождение» доменов. С июня 2025 года система ежедневно проверяет статус доменов, связанных с адресами электронной почты пользователей. Если домен переходит в период восстановления или удаления, PyPI автоматически отменяет верификацию таких адресов, предотвращая возможность захвата аккаунта через сброс пароля. С начала июня более 1 800 адресов были размечены как ненадежные. Пользователям рекомендуется добавить вторичный адрес с надежного почтового сервиса и включить двухфакторную аутентификацию для повышения безопасности.
#безопасность
@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
Маск тихо представил Grok Code и сделал его частью Cursor
Ночью xAI тихо выкатили новую модель Grok Code — гибрид на 37B активных параметров, специально обученный под кодинг.
Контекстное окно — внушительные 262K токенов.
До релиза модель пряталась под именем «sonic». Те, кто уже успел попробовать новинку, отмечают: работает быстро и точно, хотя официальных бенчей пока нет.
Самое приятное — попробовать Grok Code можно прямо сейчас в Cursor и Opencode. Причем до 2 сентября это бесплатно.
@your_tech
Паттерн 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"), хотя это лишнее.
# Общие характеристики
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()
Tree, но всего 2 объекта `TreeType` (oak и pine). Экономия памяти огромная: вместо хранения 100.000 текстур хранится только 2.
Tproger объединились с Paradox и запустили совместный проект для комьюнити разработчиков
Мы сделали два дизайна — теперь ваш ход. Вы за типичный или за токсичный вайб? Голосуйте за один из вариантов до 30 августа на сайте.
В конце месяца объявим победителя — дизайн, который сообщество реально протащило в прод.
И да, всё самое интересное будет в канале. Среди голосующих разыграем призы — так что не только банке достанется апгрейд.
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Инструкция к Kubernetes, которую поймёт даже водитель Uber
Если ваша резиновая уточка уже освоила все популярные технологии, то пора искать новую жертву. Сможете рассказать о сложном так, чтобы вас понял даже далёкий от IT водитель такси?
Автор этого материала смог и поделился своим результатом. Если вы всё ещё не до конца понимаете кубер, то скорее читайте статью:
https://dev.to/therubberduckiee/explaining-kubernetes-to-my-uber-driver-4f60
Что такое магистратура для инженеров данных и почему сейчас — лучшее время поступать
На Tproger рассказали, почему именно сейчас — лучший момент, чтобы выучиться на инженера данных. Программа магистратуры от НИУ ВШЭ совместно с Нетологией даёт официальный государственный диплом, а также дополнительный профессиональный сертификат. Обучение строится на практике: студенты накапливают портфолио через учебные проекты, хакатоны и стажировки у партнёров программы, а завершают его выпускной квалификационной работой, которая может быть исследовательской или корпоративной. Вы получите навыки работы с Python, SQL, Java, Hadoop, Airflow, Docker, Yandex Cloud, ClickHouse, PostgreSQL и сможете строить эффективные пайплайны. Есть очный и удаленный форматы.
#обучение
@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
⚡ Прямой эфир с ментором по Python Сергеем Филичкиным
Забивайте слот в календаре:
📌 19 августа, 18:00 — Сергей Филичкин проведёт бесплатную открытую консультацию в «Коде найма».
Тему этого эфира помогли выбрать вы! Будем разбирать, «Как собирать офферы «про запас» и торговаться за лучшую цену». А вот более подробный план встречи:
🖇Как грамотно позиционировать себя на рынке, чтобы получить больше предложений.
🖇Психология успеха в переговорах: как уверенно говорить о деньгах.
🖇Тактика сбора офферов и ведения торгов.
🖇Лайфхаки по автоматизации поиска и переписки с рекрутерами.
🖇Блок Q&A с разбором ваших ситуаций.
💬 Оставляйте свои вопросы Сергею под этим постом — чтобы наш ментор дал развернутые и действительно рабочие советы!
✅Python-карьера в 2025 без воды: деньги, офферы, переговоры. Подписывайся.
ИП Филичкин Сергей Андреевич ИНН 183401586208, erid: 2W5zFJydiRE
Квиз: какой ты магистр информационных технологий
Собрали для вас интерактивный приключенческий квест с сеттингом футуристичного города инженеров. Всего пару минут и вы узнаете, какая магистерская программа точно будет вам по духу.
Сохраняйте: https://tprg.ru/YGcC
Requests для начинающих + пара фишек для адептов
requests является де-факто стандартом для HTTP-запросов в Python. Она упрощает взаимодействие с веб-сервисами, предоставляя интуитивно понятный интерфейс для отправки запросов и обработки ответов.
Инструмент не входит в стандартную библиотеку ЯП, поэтому его необходимо установить отдельно:
python -m pip install requests
GET:
import requests
response = requests.get('https://example.com')
print(response.text)
POST:
import requests
data = {'key': 'value'}
response = requests.post('https://example.com', data=data)
print(response.text)
print(response.status_code) # 200 — успешный запрос
json():
data = response.json()
params = {'q': 'python'}
response = requests.get('https://example.com/search', params=params)
headers:
headers = {'User-Agent': 'my-app'}
response = requests.get('https://example.com', headers=headers)
from requests import Request, Session
req = Request('GET', 'https://example.com', params={'q': 'python'})
prepared = req.prepare()
with Session() as session:
response = session.send(prepared)
print(response.text)
auth:
from requests.auth import HTTPBasicAuth
response = requests.get('https://example.com', auth=HTTPBasicAuth('user', 'pass'))
verify:
response = requests.get('https://example.com', verify=False)
with requests.Session() as session:
response = session.get('https://example.com')
print(response.text)
urllib3 вместе с Requests.
Онлайн-студия big tech night
Если вас не будет в Москве в день ивента, подключайтесь к нашей онлайн-студии. Мы подготовили огненную программу, которая отличается от офлайн-активностей:
🔴 Выступления спикеров от компаний-организаторов и других топов в индустрии
🔴 Микс форматов — от дискуссий и интервью до фановых историй из жизни разработчиков
🔴 Интерактивы с комментариями зрителей
Проведём сразу два прямых эфира:
✨ Студия Hard
В формате дискуссий и интервью обсудим сложные темы — управление IT-командой, AI в разработке, запуск проектов на несколько бизнесов.
✨ Студия Soft
Настоящая вечеринка в формате Late Night Show. Будем общаться, шутить и делиться сокровенным — например, обсудим необычные хобби и безумные pet-проекты.
❗️ Можно переключаться между студиями, чтобы поймать все самые интересные темы.
💻 Мы в эфире 12 сентября с 18:00 до 21:00
❤️Зарегистрируйтесь на сайте, чтобы получить ссылку на трансляцию
Подписывайтесь:
💬 big tech night
Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543
Это #партнёрский пост
6 способов автоматизировать ревью кода — подборка сервисов
Если вы устали от ручного кода-ревью, в подборке Tproger вы найдете шесть действенных способов автоматизировать этот процесс. Среди тулов выделяется BeeCR, который интегрируется с GitLab. Также представлен Reshift — легковесный JavaScript-плагин, ориентированный на выявление уязвимостей ещё на этапе разработки.
#инструмент
@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
Omnara | Центр управления полетами для ваших ИИ-копайлотов
Платформа для мониторинга и управления ИИ-агентами (такими как Claude Code, Cursor и другими), которая позволяет отслеживать их работу в реальном времени и получать уведомления, когда агенты нуждаются в помощи. Инструмент работает как в веб-версии, так и в мобильном приложении. Также реализованы REST API, Python SDK и MCP (Model Context Protocol). Такой тул позволяет вам настроить своих AI-заместителей и больше времени проводить за нерутинными задачами.
Цена: бесплатно (но за токены придется платить)
Доступен в РФ: да
@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
Мы писали ранее, что 12 сентября пройдёт big tech night. Событие придумали в Яндексе и организовали вместе со Сбером, X5, Т-Банком и Lamoda. Впервые топовые IT-компании одновременно откроют двери офисов в Москве с 18:00 до 00:00 и покажут специалистам, где рождаются технологии.
Пора рассказать о тех, кто выйдет на сцену⚡️
📣 Кто и о чём расскажет на big tech night? Начинаем представлять спикеров и темы. Читайте на карточках.
➡️ А подробнее про доклады рассказываем на сайте
Подписывайтесь:
💬 big tech night
Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543
@pytest.mark.parametrize: Как параметризировать тесты
Тестирование кода может быть утомительным процессом. Когда у вас есть множество похожих тестовых случаев, написание отдельных функций для каждого часто приводит к дублированию кода. Именно здесь на помощь приходит функция @pytest.mark.parametrize.
Начнем с простого примера. У нас есть функция add_nums(), которая складывает числа из списка:
def add_nums(numbers):
return sum(numbers)
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
@pytest.mark.parametrize — это специальный декоратор pytestnums, expected_total" — имена параметров функции
# Первый вызов
test_add_nums([1, 2, 3], 6)
# Второй вызов
test_add_nums([1, 2, -3], 0)
# Третий вызов
test_add_nums([], 0)
@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
Вопрос подписчика: IDE + GPT
Задает @vberia:
«Какие IDE и какие GPT сейчас актуальны? Можно топ 3? Не хочется тестировать лишнего, но хочется протестить нужные)».
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#вопросы_подписчиков
@zen_of_python
tyro | Ваша функция, вызываемая в CLItyro.cli() автоматически преобразует Python-функцию или класс с аннотациями типов в полнофункциональный интерфейс командной строки, без необходимости вручную прописывать парсинг аргументов:
@dataclass
class Config:
input_file: str
verbose: bool = False
tyro.cli(Config) создаёт полноценный CLI, где аргументы --input-file и --verbose будут автоматически сгенерированы, а при вызове в терминале доступна помощь (--help).mypy, pyright: автодополнение, переход к определению, рефакторинг — всё работает «из коробки». Это даст возможность автокомплитить с Tab.
complexipy | Вычисляем когнитивную сложность вашего кода
Нетривиальный инструмент, позволяющий вычислить Cognitive Complexity («когнитивную сложность»). В контексте программирования это метрика, оценивающая насколько трудно человеку понять код — учитываются не только ветвления и циклы, как в Cyclomatic Complexity, но и структура, глубина вложенности, логические конструкции, операторы и прочие аспекты, создающие когнитивную нагрузку при чтении. Это важная метрика при рефакторинге проекта.
Тул интегрируется через CLI, GitHub Actions, pre-commit-hooks и позволяет анализировать функции, файлы и директории, указывая те, чей коэффициент сложности превышает определенный порог.
#инструмент
@zen_of_python
💔 — Если рефакторинг разбивает сердце