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
except* | Зачем нужна звездочка?

Когда мы работаем с asyncio, может случиться так, что несколько задач выбрасывают ошибки одновременно.

До Python 3.11 ловилась только первая ошибка. Остальные — либо игнорировались, либо приходилось мучиться с обработкой.

С Python 3.11 ввели ExceptionGroup. Это контейнер для нескольких исключений.


ExceptionGroup(
[ValueError("Ошибка 1"), TypeError("Ошибка 2")]
)


Рассмотрим пример:


import asyncio

async def task1():
raise ValueError("Ошибка в task1")

async def task2():
raise TypeError("Ошибка в task2")

async def main():
try: # ловит ExceptionGroup
await asyncio.gather(task1(), task2()) # запускает обе задачи параллельно
except* ValueError as e: # перехватывает все ValueError из группы
for err in e.exceptions:
print(f"Перехвачено ValueError: {err}")
except* TypeError as e: # перехватывает все TypeError
for err in e.exceptions:
print(f"Перехвачено TypeError: {err}")

asyncio.run(main())

'''
Вывод:
Перехвачено ValueError: Ошибка в task1
Перехвачено TypeError: Ошибка в task2
'''


Подводные камни except*

- except* нельзя комбинировать с обычным except в одном обработчике (`except* ValueError as e, TypeError as e2` — так нельзя);
- except* работает только с ExceptionGroup — для обычных исключений он не нужен;
👍142
PEP 770 принят: «Улучшая измеримость пакетов ...»

11 апреля принята к разработке стандартизированный метод SBOM (англ. Software Bill-of-Materials). Этот документ будет располагаться в .dist-info/sboms и:
решать проблему «фантомных зависимостей». Многие зависимости содержат встроенные компоненты на других языках (например, C, C++, Rust), которые не отражаются в стандартных метаданных. Это затрудняет анализ состава программного обеспечения и может привести к пропущенным уязвимостям.

Предложение не ограничивается одним форматом SBOM. В зависимости от потребностей разработчиков предлагают две альтернативы.

#факт
@zen_of_python
👀3🎃1
League-Smile-Therapy | Как часто компьютерный игрок улыбается

Один любопытный реддитор создал приложение на Python + OpenCV, которое буквально смотрит, улыбаетесь ли вы во время игры в League of Legends. А что, там какие-то плюшки за позитивный настрой полагаются?

#кек
@zen_of_python
👀2🎃1
Редакция Tproger желает питонистам хорошенько почиллить на этих майских праздниках. Также помянем коллег из поддержки 24 / 7 (оставим им хотя бы цифровой шашлык):

©-🐍-🤓-😂-🐍-🕸-🔖->
| |
| |
|🔥 🔥 🔥🔥🔥🔥 🔥|

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4🤪3
Пока весна цветёт в коммитах мая,
Твой Python-код без лишних точек с запятой.
С Первомаем, кодер, Поздравляю!
Пусть в выходные твой канбан несет покой.

@zen_of_python
👏14👎21
ПОВ: ты шашлык на тарелке

#кек
@zen_of_python
😁14🔥4🤣2
Это оберег от новых задач. Пускай рабочие чаты пополняются сообщениями, уведомления о них на майские сегодня можно заглушить.

❤️, если заглушил все рабочие уведомления
🎃, если вынужден гасить внезапные пожары на выходных

@zen_of_python
110🎃4🌚3
Forwarded from Нейроканал
Вежливость города нейросети берет.

Восстание машин ему точно не страшно.
😁24👍3
Forwarded from IT Юмор
🙏 и у вас буду выходные без инцидентов

@ithumor
🙏38
This media is not supported in your browser
VIEW IN TELEGRAM
Давно хотелось сделать такую RPG: Средневековый герой верхом на огромном волшебном питоне выполняет миссии и спасает людей от изнуряющей работы, потому что единственный из всех знает программирование...

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

#кек
@zen_of_python
🔥73🦄21👍1
pyfonts | Любой шрифт Google Fonts в Matplotlib

Если вы тоже выступаете за «дизайнеризацию» ноутбуков и в целом хотите унифицировать графики и текст вокруг них, этот тул позволит подключить любое из 1800+ начертаний за пару строк кода.

Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
7🌭1
pdfrename | Массовое именование PDF-файлов

Если вы генерируете файлы.pdf скопом и нуждаетесь в их автоименовании, библиотека:
— распознает документ;
— подаст его ChatGPT (OpenAI API);
— сформирует осмысленный заголовок.

Цена: бесплатно, но за токены придется платить
Репозиторий проекта
#инструмент
@zen_of_python
👎3👏1
pydoll | Веб-автоматизация без веб-драйверов

Питоническое решение извечного вопроса скрейпинга, избавляющее разработчика от боли подбора нужной версии ChromeDriver. Обещано также бесшовное прохождение «турникета» Cloudflare и reCAPTCHA v3*.

Цена: бесплатно
Репозиторий проекта
🔥72
This media is not supported in your browser
VIEW IN TELEGRAM
Поисковая строка с ИИ на Django-сайте

Небанальная англоязычная статья-лонгрид о прикрутке Rust-библиотеки Mellisearch для неточного поиска на вашем питоническом сайте. Помимо скорости обещают еще и допуск опечаток, поддержку русского языка и другие киллер-фичи.

#инструмент
@zen_of_python
👍41
t-строки: что это и чем отличаются от f-строк?

t-строки (template strings), предложенные в PEP 750, — новый механизм безопасной интерполяции строк. В отличие от f-собрата, t-строка не создает обычный string, а возвращает объекты шаблонов, которые можно безопасно обрабатывать, не боясь вредоносных SQL-инъекций.

t-строки автоматически экранируют вставляемые значения, предотвращая инъекции команд или SQL. Они возвращают специальные объекты, которые можно передавать в функции, поддерживающие шаблоны, обеспечивая дополнительную безопасность.

PEP 787 дал возможность использовать такое в модулях subprocess и shlex, включая новую функцию sh() для безопасной сборки командной строки.


from shlex import sh
from subprocess import run

user_input = "some file.txt"
run(sh(t"cat {user_input}"))


Хотя t-строки обеспечивают безопасность, они требуют поддержки со стороны функций и библиотек. Например, попытка передать t-строку в функцию, ожидающую обычную строку, вызовет ошибку. Кроме того, интеграция t-строк в subprocess отложена до Python 3.15 из-за сложностей с кроссплатформенной реализацией.

#основы
@zen_of_python
👍10🤔931🔥1
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