help(): что вы о ней не знали
Это несправедливо забытый инструмент для глубокого понимания не только встроенных объектов ЯП, но и вашего проекта. Она позволяет получать информацию о функциях, модулях, объектах, символах, ключевых словах и темах. В посте вас ждут небанальные примеры ее использования.
— Передача класса или его экземпляра в
— Ключевые слова: чтобы освежить свои познания про тот или иной оператор, тоже подойдет help():
— Ключевые слова:
— Спецсимволы:
Это несправедливо забытый инструмент для глубокого понимания не только встроенных объектов ЯП, но и вашего проекта. Она позволяет получать информацию о функциях, модулях, объектах, символах, ключевых словах и темах. В посте вас ждут небанальные примеры ее использования.
— Передача класса или его экземпляра в
help()
отображает документацию класса и его методов. Даже если класс самописный.— Ключевые слова: чтобы освежить свои познания про тот или иной оператор, тоже подойдет help():
>>> help('for')
The "for" statement
*******************
The "for" statement is used to iterate over the elements of a sequence
(such as a string, tuple or list) or other iterable object:
for_stmt ::= "for" target_list "in" starred_list ":" suite
["else" ":" suite]
— Ключевые слова:
>>> help('keywords')
Here is a list of the Python keywords. Enter any keyword to get more help.
False class from or
...
— Спецсимволы:
>>> help('symbols')
Here is a list of the punctuation symbols which Python assigns special meaning
to. Enter any symbol to get more help.
!= + <<= _
...
👍3👏3🌭3🔥1
python-docx | Обращаемся с MS Word
Если вам не избежать Microsoft Word, то этот инструмент позволяет создавать, изменять и извлекать данные из документов (то есть все вариации CRUD — create, read, update, delete) с форматом .docx. Любая деталь вплоть до форматирования.
Цена: бесплатно
Репозиторий проекта
Если вам не избежать Microsoft Word, то этот инструмент позволяет создавать, изменять и извлекать данные из документов (то есть все вариации CRUD — create, read, update, delete) с форматом .docx. Любая деталь вплоть до форматирования.
Цена: бесплатно
Репозиторий проекта
👍3❤1🥱1😐1
picows | WebSocket-клиенты
Если вам хочется развеяться в рамках Python и «переключиться на железо», эта библиотека как раз позволяет создавать WebSocket-клиенты.
Это такая программа или компонент, который устанавливает постоянное двустороннее соединение, позволяя обмениваться данными в реальном времени без необходимости повторных запросов.
Репозиторий проекта
#инструмент
@zen_of_python
Если вам хочется развеяться в рамках Python и «переключиться на железо», эта библиотека как раз позволяет создавать WebSocket-клиенты.
Это такая программа или компонент, который устанавливает постоянное двустороннее соединение, позволяя обмениваться данными в реальном времени без необходимости повторных запросов.
Репозиторий проекта
#инструмент
@zen_of_python
👍1🤓1
try-except «укоротят»
Недавно приняли PEP 758, и там решили убрать скобочки при перечислении типов ошибок в try-except:
except (ExceptionA, ExceptionB, ExceptionC):
#факт
@zen_of_python
Недавно приняли PEP 758, и там решили убрать скобочки при перечислении типов ошибок в try-except:
try:
...
except ExceptionA, ExceptionB, ExceptionC:
...
#факт
@zen_of_python
🤷♂17🔥11❤5👍1🤔1
Pattern Matching в Python 3.13
Помимо No GIL и билдов для iOS-приложений, в новой версии были внесены улучшения в структурное сопоставление с образцом (Pattern Matching). Одним из ключевых нововведений стало более интуитивное сопоставление по атрибутам объектов.
Ранее для сопоставления объектов по их атрибутам требовалось использовать дополнительные методы или свойства, что усложняло код. С введением новой функциональности в Python 3.13 стало возможным напрямую сопоставлять объекты по их атрибутам в конструкции
- Если объект
- Если
- Во всех остальных случаях возвращаются разрешения по умолчанию.
Под капотом сопоставление по атрибутам работает следующим образом:
- Проверяется, является ли объект экземпляром указанного класса;
- Затем происходит попытка сопоставления указанных атрибутов объекта с заданными значениями или шаблонами;
- Если все условия выполняются, сопоставление считается успешным, и можно использовать переменные, полученные в результате сопоставления.
Помимо No GIL и билдов для iOS-приложений, в новой версии были внесены улучшения в структурное сопоставление с образцом (Pattern Matching). Одним из ключевых нововведений стало более интуитивное сопоставление по атрибутам объектов.
Ранее для сопоставления объектов по их атрибутам требовалось использовать дополнительные методы или свойства, что усложняло код. С введением новой функциональности в Python 3.13 стало возможным напрямую сопоставлять объекты по их атрибутам в конструкции
match-case
.
match user:
case User(name="Admin", role=AdminRole()) as admin:
return admin.get_permissions()
case User(name=name, role="editor") if is_senior(name):
return editor_permissions()
case _:
return default_permissions()
- Если объект
user
является экземпляром класса User
с атрибутом name
, равным "Admin"
, и атрибутом role
, являющимся экземпляром AdminRole
, то он присваивается переменной admin
, и вызывается метод get_permissions()
;- Если
user
— это User
с ролью "editor"
и именем, удовлетворяющим условию is_senior(name)
, то возвращаются разрешения редактора.- Во всех остальных случаях возвращаются разрешения по умолчанию.
Под капотом сопоставление по атрибутам работает следующим образом:
- Проверяется, является ли объект экземпляром указанного класса;
- Затем происходит попытка сопоставления указанных атрибутов объекта с заданными значениями или шаблонами;
- Если все условия выполняются, сопоставление считается успешным, и можно использовать переменные, полученные в результате сопоставления.
Python Enhancement Proposals (PEPs)
PEP 634 – Structural Pattern Matching: Specification | peps.python.org
This PEP provides the technical specification for the match statement. It replaces PEP 622, which is hereby split in three parts:
👍13⚡1🤔1🤓1
This media is not supported in your browser
VIEW IN TELEGRAM
CUDA Python
CUDA — платформа параллельных вычислений, с ней мы можем запускать свой код на графических процессорах.
NVIDIA очнулась, и теперь предоставляет нативную поддержку Python для этой экосистемы. Ранее для запуска использовались C / C++ или сторонние обёртки.
Теперь Python — так называемый язык первого класса в CUDA. Для специалистов в области машинного обучения это означает ускорение вычислений на GPU.
#факт
@zen_of_python
CUDA — платформа параллельных вычислений, с ней мы можем запускать свой код на графических процессорах.
NVIDIA очнулась, и теперь предоставляет нативную поддержку Python для этой экосистемы. Ранее для запуска использовались C / C++ или сторонние обёртки.
Теперь Python — так называемый язык первого класса в CUDA. Для специалистов в области машинного обучения это означает ускорение вычислений на GPU.
#факт
@zen_of_python
🔥19⚡1❤1
Вопрос подписчика
Задает @kirillkasparyants1:
«обработка файлов с расширением отличный от .txt»
От админа: если вас интересуют форматы вроде .docx, то почти для каждого из них на PyPi уже есть либа: python-docx, python-pdf и проч.
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
Задает @kirillkasparyants1:
«обработка файлов с расширением отличный от .txt»
От админа: если вас интересуют форматы вроде .docx, то почти для каждого из них на PyPi уже есть либа: python-docx, python-pdf и проч.
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
✍1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Как я сделал Telegram-кружки из обычного видео с помощью Python, ffmpeg и магии
Автор статьи — подписчик Tproger, описал, как с помощью Python и FFmpeg можно преобразовать видео в Telegram-кружочки. Хороший способ познакомиться с питонической обработкой видео и Telegram Bot API.
#основы
@zen_of_python
Автор статьи — подписчик Tproger, описал, как с помощью Python и FFmpeg можно преобразовать видео в Telegram-кружочки. Хороший способ познакомиться с питонической обработкой видео и Telegram Bot API.
#основы
@zen_of_python
⚡2❤🔥1❤1🌭1
Hot Module Reloading для вашего проекта на WSGI
Тоже надоело перезапускать бота в командной строке при каждом изменении кода?
Традиционные инструменты, такие как
Одна команда реализовала такую перезагрузку «на месте» с помощью Dependency Graph. При изменении файла система определяет все связанные с ним модули и обновляет только их.
Используя карту зависимостей и отслеживание порядка импорта, удалось сократить время обновления с 4,8 секунды до 6 миллисекунд.
✍️ — бывало, подбешивало
🗿 — ну и пускай перезагружается с нуля
#факт
@zen_of_python
Тоже надоело перезапускать бота в командной строке при каждом изменении кода?
Традиционные инструменты, такие как
uvicorn --reload
или gunicorn --reload
, при любом изменении кода полностью перезапускают сервер. Это может занимать целую вечность, если проект крупный.Одна команда реализовала такую перезагрузку «на месте» с помощью Dependency Graph. При изменении файла система определяет все связанные с ним модули и обновляет только их.
Используя карту зависимостей и отслеживание порядка импорта, удалось сократить время обновления с 4,8 секунды до 6 миллисекунд.
✍️ — бывало, подбешивало
🗿 — ну и пускай перезагружается с нуля
#факт
@zen_of_python
🗿10👎3🤝1
Вопрос подписчика
Задает @FieryDruid:
«Генерировал ли кто-нибудь индексы для моделей sqlalchemy в рантайме?
Так сложилось, что индексов надо достаточно много и генерируются они по определенному принципу, из-за чего вручную их описывать в модели очень не удобно.
Написали генератор, который за нас заполняет __tableargs__ модели
Но из-за такого генератора появилось странное поведение alembic
Теперь, при каждой новой миграции, он в upgrade сначала удаляет все старые индексы, а потом добавляет их же (первая генерация нормальная, но каждая последующая сопровождается такими вот артефактами)
Может кто сталкивался или есть мысли из-за чего такое поведение может быть? Порядок генерируется один и тот же, нейминги, типы и т.д тоже».
#обсуждение
@zen_of_python
Задает @FieryDruid:
«Генерировал ли кто-нибудь индексы для моделей sqlalchemy в рантайме?
Так сложилось, что индексов надо достаточно много и генерируются они по определенному принципу, из-за чего вручную их описывать в модели очень не удобно.
Написали генератор, который за нас заполняет __tableargs__ модели
Но из-за такого генератора появилось странное поведение alembic
Теперь, при каждой новой миграции, он в upgrade сначала удаляет все старые индексы, а потом добавляет их же (первая генерация нормальная, но каждая последующая сопровождается такими вот артефактами)
Может кто сталкивался или есть мысли из-за чего такое поведение может быть? Порядок генерируется один и тот же, нейминги, типы и т.д тоже».
#обсуждение
@zen_of_python
👍3❤1
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Python — это уже целая религия, однако Гвидо ван Россум в ней точно отказался от роли кумира.
#кек
@zen_of_python
#кек
@zen_of_python
🗿4👎3😁2😐1
Еще бы, ведь спустя столько лет наконец появились время и навык для того самого пет-проекта
#кек
@zen_of_python
#кек
@zen_of_python
❤🔥1😐1
copier | Ctrl + C, Ctrl + V для шаблонов проекта
Если вам тоже надоело настраивать проекты с нуля каждый раз, то этот инструмент как раз автоматизирует такую рутинную задачу. Принимает как локальные пути до темплейтов, так и ссылки GitHub.
❤️ — пускай у подписчиков аптайм будет 99,99%
🌚 — хочу, чтобы тот самый подходящий репозиторий с GitHub всегда был с фиксированными версиями зависимостей
Цена: бесплатно
Библиотека на PyPi
#инструмент
@zen_of_python
Если вам тоже надоело настраивать проекты с нуля каждый раз, то этот инструмент как раз автоматизирует такую рутинную задачу. Принимает как локальные пути до темплейтов, так и ссылки GitHub.
❤️ — пускай у подписчиков аптайм будет 99,99%
🌚 — хочу, чтобы тот самый подходящий репозиторий с GitHub всегда был с фиксированными версиями зависимостей
Цена: бесплатно
Библиотека на PyPi
#инструмент
@zen_of_python
🌚5❤4👍1
This media is not supported in your browser
VIEW IN TELEGRAM
zev | Помнит CLI-команды за вас
Утилита на базе OpenAI, которая поймет ваш запрос «на простом человеческом» и в ответ вернет команду, с учетом операционки, естественно. Создатели рекомендуют ollama, так тул вообще станет условно бесплатным.
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
Утилита на базе OpenAI, которая поймет ваш запрос «на простом человеческом» и в ответ вернет команду, с учетом операционки, естественно. Создатели рекомендуют ollama, так тул вообще станет условно бесплатным.
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
🔥2✍1
Вопрос подписчика
Задает @Ilia_O_P:
«Есть у кого-нибудь пример метакласса, который запоминал бы изменения в объектах дочерних классов и мог их откатить, при запросе?»
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
Задает @Ilia_O_P:
«Есть у кого-нибудь пример метакласса, который запоминал бы изменения в объектах дочерних классов и мог их откатить, при запросе?»
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
🔥2🎃1
except* | Зачем нужна звездочка?
Когда мы работаем с asyncio, может случиться так, что несколько задач выбрасывают ошибки одновременно.
До Python 3.11 ловилась только первая ошибка. Остальные — либо игнорировались, либо приходилось мучиться с обработкой.
С Python 3.11 ввели ExceptionGroup. Это контейнер для нескольких исключений.
Рассмотрим пример:
Подводные камни except*
- except* нельзя комбинировать с обычным except в одном обработчике (`except* ValueError as e, TypeError as e2` — так нельзя);
- except* работает только с ExceptionGroup — для обычных исключений он не нужен;
Когда мы работаем с 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 — для обычных исключений он не нужен;
👍14❤2
PEP 770 принят: «Улучшая измеримость пакетов ...»
11 апреля принята к разработке стандартизированный метод SBOM (англ. Software Bill-of-Materials). Этот документ будет располагаться в .dist-info/sboms и:
решать проблему «фантомных зависимостей». Многие зависимости содержат встроенные компоненты на других языках (например, C, C++, Rust), которые не отражаются в стандартных метаданных. Это затрудняет анализ состава программного обеспечения и может привести к пропущенным уязвимостям.
Предложение не ограничивается одним форматом SBOM. В зависимости от потребностей разработчиков предлагают две альтернативы.
#факт
@zen_of_python
11 апреля принята к разработке стандартизированный метод SBOM (англ. Software Bill-of-Materials). Этот документ будет располагаться в .dist-info/sboms и:
решать проблему «фантомных зависимостей». Многие зависимости содержат встроенные компоненты на других языках (например, C, C++, Rust), которые не отражаются в стандартных метаданных. Это затрудняет анализ состава программного обеспечения и может привести к пропущенным уязвимостям.
Предложение не ограничивается одним форматом SBOM. В зависимости от потребностей разработчиков предлагают две альтернативы.
#факт
@zen_of_python
👀3🎃1