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

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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
robyn | Ваш API будет самым быстрым

Если правильно организовать эксперимент, то и на вершину рейтинга производительности взобраться несложно. Фреймворк предлагает беспрецедентную производительность вашего будущего API засчет рантайма на Rust.

Среди фичей все самое «вкусное»:

Поддерживает (а)синхронные функции;
Самодокументирует ваш API;
Позволяет создавать приложения с двусторонней связью (WebSocket);
Интегрируется напрямую с кодом на Rust;
Автоматически перезагружает сервер при изменении файлов (Hot Reload);

Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
🤔2🆒1
enum: где обладает преимуществом

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

Рассмотрим функцию, которая получает температуру в заданном городе:


def get_temperature(city, unit):
...


Значение параметра unit может быть либо "celsius", либо "fahrenheit". Однако использование строковых литералов может привести к ошибкам из-за опечаток или несогласованности в написании. Чтобы избежать этого, можно использовать перечисление:


from enum import Enum

class TempUnit(Enum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"


Теперь функция может быть вызвана так:


get_temperature("Lisbon", TempUnit.CELSIUS)


Это обеспечивает автодополнение в IDE, предотвращает опечатки и делает код более самодокументируемым.

Когда конкретные значения не имеют значения, можно использовать auto для автоматического присвоения значений:


from enum import Enum, auto

class Weekday(Enum):
MONDAY = auto()
TUESDAY = auto()
WEDNESDAY = auto()


В этом случае значения будут автоматически присвоены в порядке определения.

Модуль enum также предоставляет специализированные классы перечислений:

IntEnum: Подкласс int, позволяющий использовать перечисления в арифметических операциях;
Flag / IntFlag: Позволяют комбинировать значения с помощью побитовых операций, что полезно для представления множественных состояний.

В нем также представлены дополнительные инструменты для работы с перечислениями:

EnumCheck: Позволяет проверять уникальность значений в перечислении;
FlagBoundary: Управляет поведением при работе с недопустимыми значениями в перечислениях Flag;
EnumDict: Подкласс dict, используемый при создании метаклассов перечислений.

#основы
@zen_of_python
👍41👎1
Forwarded from Метод утёнка
Это оберег от новых задач между майскими. Вы знаете, кому его отправить.
👍93😁1
Майские праздники в этом году как генератор в Python — вроде начались, но сейчас только yield, return ещё не было.

#кек
@zen_of_python
😁7👍51
​​Самый питонический фон для созвона, для тех, кто только что в чем-то преуспел.

#кек
@zen_of_python
5👍3😁2🌚1
Жизненные задачки подъехали

🦄, если жиза
#кек #основы
@zen_of_python
😁223🤪1🗿1🦄1
На случай, если вы все еще бухаете морально не готовы вернуться к работе, на GitHub бесплатно дают кодить с целым букетом LLM:
— ChatGPT
— DeepSeek
— Mistral
— MIcrosoft Phi и проч.

Выставил такого ИИ-работника вместо себя в начале недели — и никто не поймет подмены.

#инструмент
@zen_of_python
😁1👌1🌚1
​​Держите питонический амулет. Он защитит вас завтра от груженых понедельников, и коллег с «домайскими» отложенными задачами.

#кек
@zen_of_python
👍5👎1😁1
​​Солидный апдейт pip

Среди новшеств версии 25.1:
Группы зависимостей: Теперь можно устанавливать «пачками», определёнными в pyproject.toml. Это позволяет устанавливать, например, только зависимости для тестирования или разработки:

pip install --group test

Возобновляемые загрузки: прерванные из-за нестабильного интернета загрузки все же выполнятся;

Индикатор прогресса установки;

— Ускорение pip show, pip freeze на 15–30%;

— Улучшенные сообщения об ошибках: Сообщения об ошибках при удалении пакетов стали более информативными.

Release Note
#инструмент
@zen_of_python
👍6
👍🏻, если не хочешь ставить ❤️
#основы
@zen_of_python
8👍4🤔2🌭2
​​GlyphX | Старший брат Matplotlib

Альтернатива общепринятому инструменту визуализации, glyphx предлагает:

— SVG-рендеринг;
— интерактивность по умолчанию (как у plotly);
— палитры с темными темами и для людей с особенностями зрения.

Таргетировано на научные работы, где важна глубокая кастомизация и редкие типы диаграмм.

#инструмент
@zen_of_python
👍31🌭1
Апгрейд Win-установочника Python

Разработчики языка оптимизируют процесс установки Python на Windows с помощью т.н. PyManager. Вот его ключевые обновления:

Единый инструмент установки: Ранее существовало несколько способов установки Python на Windows: традиционный установщик .exe, пакет в Microsoft Store и NuGet-пакеты. PyManager объединяет их в один инструмент, упрощая процесс установки и управления версиями Python.

Управление несколькими версиями: PyManager позволяет устанавливать и управлять несколькими версиями Python одновременно, включая возможность установки конкретных версий и архитектур (например, py install 3.11.4 --arch=arm64). Это особенно полезно для тестировщиков.

PEP-773
#факт
@zen_of_python
👍2🆒1
Почему все реже встречается __init__

В питоническом комьюнити некоторые призывают отказаться от пользовательских методов __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
1👍1🌭1