Zen of Python
20.1K subscribers
1.24K photos
167 videos
32 files
3.2K links
Полный Дзен Пайтона в одном канале

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

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

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

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

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

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

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

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

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

Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543
🌭1🆒1
Forwarded from Типичный программист
Инструкция к Kubernetes, которую поймёт даже водитель Uber

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

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

https://dev.to/therubberduckiee/explaining-kubernetes-to-my-uber-driver-4f60
👍3😭2👨‍💻1
Многофакторное сравнение пяти популярных вычислительных движков Big Data

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

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

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

#инструмент
@zen_of_python
1🌭1
Вопросы подписчиков

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

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

#вопросы_новичков
@zen_of_python
Мотивация зрелого разработчика
#кек
@zen_of_python
😁2🌚1
Forwarded from Типичный программист
Tproger объединились с Paradox и запустили совместный проект для комьюнити разработчиков
 
Мы сделали два дизайна — теперь ваш ход. Вы за типичный или за токсичный вайб? Голосуйте за один из вариантов до 30 августа на сайте.
 
В конце месяца объявим победителя — дизайн, который сообщество реально протащило в прод.
 
И да, всё самое интересное будет в канале. Среди голосующих разыграем призы — так что не только банке достанется апгрейд.
1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Линейка в доме питониста никогда не покрывается пылью 🙂
#кек
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🤷‍♂14👍7🗿4💊1
Forwarded from Нейроканал
This media is not supported in your browser
VIEW IN TELEGRAM
Получается нас уже заменили?

#постИИрония
😁10
This media is not supported in your browser
VIEW IN TELEGRAM
Omnara | Центр управления полетами для ваших ИИ-копайлотов

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

Цена: бесплатно (но за токены придется платить)
Доступен в РФ: да
@zen_of_python
1🗿1
Паттерн 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
Please open Telegram to view this post
VIEW IN TELEGRAM
2🆒1
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
🤓 — Если изучил досконально
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒4🤓311
Маск тихо представил Grok Code и сделал его частью Cursor

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

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

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

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

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

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

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