Оказывается, на хабре опубликовали перевод статьи https://habr.com/ru/articles/853056/
پستهای تلگرام Хитрый Питон

Я много читаю и делюсь в этом канале заинтересовавшими меня материалами, в основном про Python. @korneevm
2,635 مشترک
4 عکس
213 ویدیو
آخرین بهروزرسانی 12.03.2025 08:25
کانالهای مشابه

25,041 مشترک

7,731 مشترک

1,962 مشترک
آخرین محتوای به اشتراک گذاشته شده توسط Хитрый Питон در تلگرام
Мигель Гринберг, известный своим мега-туториалом по Flask написал большой пост про обработку ошибок в python. Вопросы "когда и какие эксепшены обрабатывать" и "откуда мне узнать, какие эксепшены тут могут возникнуть" особенно актуальны у новичков, я даже у мидлов видел с этим затруднения. Статья довольно длинная, но я очень рекомендую потратить время и почитать https://blog.miguelgrinberg.com/post/the-ultimate-guide-to-error-handling-in-python
Оказывается, на хабре опубликовали перевод статьи https://habr.com/ru/articles/853056/
Оказывается, на хабре опубликовали перевод статьи https://habr.com/ru/articles/853056/
Завтра, в первую пятницу месяца обсудим в прямом эфире Moscow Python Podcast новости октября. Больше всего времени уделим Python 3.13 и посмотрим ещё несколько новостей.
🟤 Когда и во сколько: 1 ноября в 14:00 по мск
🟤 Смотреть на YouTube — https://youtube.com/live/1pv5Fq89I5Y
🟤 Cмотреть на Rutube — https://rutube.ru/video/f0369fe1772d9a225df120a0304f2270/
И подписывайтесь на наши каналы, чтобы не пропускать выпуски: YouTube и Rutube.
И подписывайтесь на наши каналы, чтобы не пропускать выпуски: YouTube и Rutube.
`LOAD_CONST` разделили на три опкода в 3.14
https://github.com/python/cpython/pull/125972
В Python 3.14 распилили один из самых популярных опкодов:
Теперь
-
-
-
А еще и
И вот демо байткода:
Зачем нужен LOAD_SMALL_INT?
https://github.com/python/cpython/issues/101291
Если вы внимательно смотрели мой видос про int, то вы помните, как выглядят инты внутри питона:
Большие и сложные объекты. Но, для очень частых маленьких чисел, такое переусложнение замедляет работу. Мы можем просто представлять числа в рамках одного машинного слова и складывать их сразу в oparg, без необходимости заргужать их из
В Python2, кстати, работало быстрее, потому что там был честный
Обсуждение
Задумываетесь ли вы про подобные микро-оптимизации, когда пишите код?
https://github.com/python/cpython/pull/125972
В Python 3.14 распилили один из самых популярных опкодов:
LOAD_CONST
. Он, как можно понять из названия, он загружал константы из frame->co_consts
:
// 3.13:
pure inst(LOAD_CONST, (-- value)) {
value = GETITEM(FRAME_CO_CONSTS, oparg);
Py_INCREF(value);
}
>>> def func():
... return 1
>>> func.__code__.co_consts
(None, 1)
Теперь
LOAD_CONST
разделен на:-
LOAD_SMALL_INT
для интов в range(256)
-
LOAD_CONST_IMMORTAL
для загрузки бесмертных объектов (на 1 Py_INCREF
меньше, см PyStackRef_FromPyObjectNew
vs `PyStackRef_FromPyObjectImmortal`)-
LOAD_CONST
для оставшихсяА еще и
RETURN_CONST
удалили под шумок. И вот демо байткода:
>>> import dis
>>> def func():
... x = 1
... y = ...
... z = 'привет, мир'
>>> dis.dis(func, adaptive=True)
2 LOAD_SMALL_INT 1
STORE_FAST 0 (x)
3 LOAD_CONST 1 (Ellipsis)
STORE_FAST 1 (y)
4 LOAD_CONST 2 ('привет, мир')
STORE_FAST 2 (z)
LOAD_CONST 0 (None)
RETURN_VALUE
>>> # Create caches for tier1 adaptive interpreter to work:
>>> for _ in range(100):
... func()
>>> dis.dis(func, adaptive=True)
2 LOAD_SMALL_INT 1
STORE_FAST 0 (x)
3 LOAD_CONST_IMMORTAL 1 (Ellipsis)
STORE_FAST 1 (y)
4 LOAD_CONST 2 ('привет, мир')
STORE_FAST 2 (z)
LOAD_CONST_IMMORTAL 0 (None)
RETURN_VALUE
Зачем нужен LOAD_SMALL_INT?
https://github.com/python/cpython/issues/101291
Если вы внимательно смотрели мой видос про int, то вы помните, как выглядят инты внутри питона:
typedef struct _PyLongValue {
uintptr_t lv_tag; /* Number of digits, sign and flags */
digit ob_digit[1];
} _PyLongValue;
struct _longobject {
PyObject_HEAD
_PyLongValue long_value;
};
Большие и сложные объекты. Но, для очень частых маленьких чисел, такое переусложнение замедляет работу. Мы можем просто представлять числа в рамках одного машинного слова и складывать их сразу в oparg, без необходимости заргужать их из
co_consts
:
op(_LOAD_SMALL_INT, (-- value)) {
PyObject *val = PyLong_FromLong(this_instr->oparg);
value = sym_new_const(ctx, val);
}
В Python2, кстати, работало быстрее, потому что там был честный
int
тип.Обсуждение
Задумываетесь ли вы про подобные микро-оптимизации, когда пишите код?
Сейчас регулярно вижу (и иногда сам участвую) в дискуссиях "зачем нам nogil"? И вот люди начинают пробовать free-treading билд питона и рассказывают о своем опыте.
Например, вот тут чувак в асинхронной программе вынес cpu-bound задачку в тред используя
Пока это просто прикольный эксперимент и вся эта новая машинерия довольно далека от продакшен использования, но лично мне - интересно 🙂 Вполне вероятно, что после полноценного прихода free-terading мы именно так и будем структурировать наш код в каком-нибудь FastAPI - в вебе, конечно, поменьше cpu-bound задачек, по сравнению с datasience, но тоже хватает.
https://blog.changs.co.uk/free-threaded-python-with-asyncio.html
Например, вот тут чувак в асинхронной программе вынес cpu-bound задачку в тред используя
asyncio.to_thread
и предсказуемо получил хорошее ускорение по сравнению с GIL-версией. Конкретно в его случае - в 3 раза.Пока это просто прикольный эксперимент и вся эта новая машинерия довольно далека от продакшен использования, но лично мне - интересно 🙂 Вполне вероятно, что после полноценного прихода free-terading мы именно так и будем структурировать наш код в каком-нибудь FastAPI - в вебе, конечно, поменьше cpu-bound задачек, по сравнению с datasience, но тоже хватает.
https://blog.changs.co.uk/free-threaded-python-with-asyncio.html
Привет! Сегодня в 14:00 по мск встретимся в прямом эфире Moscow Python Podcast с нашим гостем из K R M N Information Technology и обсудим:
🟤 как стать топ-1 в IT-фрилансе;
🟤 как разрабатывать ботов для торговли внутриигровых предметов;
🟤 чем занимается специалист по парсингу.
Когда: 17 октября в 14:00 (по мск).
Где: онлайн и в записи на YouTube и RuTube.
И подписывайтесь на наши каналы в YouTube и Rutube
Когда: 17 октября в 14:00 (по мск).
Где: онлайн и в записи на YouTube и RuTube.
И подписывайтесь на наши каналы в YouTube и Rutube
Python Software Foundation и JetBrains запустили опрос python-разработчиков 2024. Опрос доступен в том числе на русском языке и результаты обещают тоже перевести. В этом году они хотят охватить больше народа, поэтому если у вас есть 10 минут свободного времени - заполните его. Я уже заполнил 🙂 https://pyfound.blogspot.com/2024/10/join-python-developers-survey-2024.html
Зарелизился python 3.13, кратенько перечислю самое интересное, а подробно обсудим на подкасте в первых числах ноября.
Сначала самые интересные штуки, которые пока недоступны конечным пользователям:
- Первый релиз с nogil (который теперь официально называется free-threaded). Доступен только если собрать интерпретатор со специальным ключом
- Новый copy-and-patch JIT-компилятор, который (сюрприз!) тоже по умолчанию выключен и требует сборки с ключом
Это все выглядит очень интересно, но давайте перейдем к изменениям, которые можно пощупать и которые реально полезны:
- Эксепшены в питоне, итак, были довольно дружелюбны (по сравнению с другими языками), но в последних версиях идет планомерная работа по их улучшению. В этот раз добавили выделение цветом в терминале и более понятное сообщение об ошибке в случае, когда в проекте есть файл, совпадающий по названию с модулем, который ты хочешь импортировать (пример - у меня в проекте есть файл
- Новый клевый repl с подсветкой, возможностью редактировать не только текущую строку, автоотступами, режимами просмотра истории (F2) и вставки (F3) и самое главное – с возможностью писать
- Новые улучшения системы типов - дефолты (теперь не надо писать
-
Ну и еще всякое по мелочи. Релиз получился без каких-то больших изменений для тех, кто пишет на python, но с очень большим и интересным заделом на будущее.
Сначала самые интересные штуки, которые пока недоступны конечным пользователям:
- Первый релиз с nogil (который теперь официально называется free-threaded). Доступен только если собрать интерпретатор со специальным ключом
--disable-gil
, но если очень хочется поиграться, то можно поставить 3.13.0rc3t
с помощью pyenv. Производительность пока замерять рановато, потому что сам по себе питон в free-threaded режиме на 20% медленнее обычного из-за проблем с garbage collector-ом, мы с Никитой Соболевым довольно подробно в подкасте про это говорили, в 3.14 должны поправить, а для тестирования совместимости с библиотеками это пока не важно.- Новый copy-and-patch JIT-компилятор, который (сюрприз!) тоже по умолчанию выключен и требует сборки с ключом
--enable-experimental-jit
. На самом деле если его включить, то какой-то пользы для себя вы не увидите, так как для работы ему требуются "шаблоны", которые будут заменять куски байт-кода на машинный код, а их еще требуется написать. Собственно, его, как и nogil включили в релиз для того, чтобы можно было экспериментироватьЭто все выглядит очень интересно, но давайте перейдем к изменениям, которые можно пощупать и которые реально полезны:
- Эксепшены в питоне, итак, были довольно дружелюбны (по сравнению с другими языками), но в последних версиях идет планомерная работа по их улучшению. В этот раз добавили выделение цветом в терминале и более понятное сообщение об ошибке в случае, когда в проекте есть файл, совпадающий по названию с модулем, который ты хочешь импортировать (пример - у меня в проекте есть файл
django.py
и я в другом файле пробую импортировать что-то из реальной джанги `from django import forms`)- Новый клевый repl с подсветкой, возможностью редактировать не только текущую строку, автоотступами, режимами просмотра истории (F2) и вставки (F3) и самое главное – с возможностью писать
exit
без скобочек 🙂- Новые улучшения системы типов - дефолты (теперь не надо писать
Generator[int, None, None]
- можно просто Generator[int]`), возможность объявить атрибут TypedDict-а как `ReadOnly
и TypeIs
для более строгой проверки типов-
glob("**")
из pathlib теперь показывает файлы и папки рекурсивно (раньше показывал только папки), привели в соответствие с тем, как это реализовано в большинстве других инструментов, например ls **
Ну и еще всякое по мелочи. Релиз получился без каких-то больших изменений для тех, кто пишет на python, но с очень большим и интересным заделом на будущее.
Привет! Напоминаем, что сегодня, 4 октября в 14:00 по мск обсудим новости сентября:
🟤 перенос релиза 3.13 или настало время перестать использовать 3.8;
🟤 Python Developers Survey 2023;
🟤 большая дискуссия про uv в хвиторе.
Когда: 4 октября в 14:00 (по мск).
Где: онлайн и в записи на YouTube и RuTube.
И да, у нас теперь есть канал и на RuTube, подписывайтесь — https://rutube.ru/channel/45885590/
Когда: 4 октября в 14:00 (по мск).
Где: онлайн и в записи на YouTube и RuTube.
И да, у нас теперь есть канал и на RuTube, подписывайтесь — https://rutube.ru/channel/45885590/
Один из частых вопросов в комментариях к подкасту - где взять идеи для учебных Dajngo-проектов. Хотя я сам считаю, что лучший учебный проект — это тот который ты придумал сам и который тебя драйвит, я понимаю, что многим было бы удобнее взять какую-то плюс-минус готовую идею и сосредоточиться на разработке.
JetBrains у себя в блоге опубликовали список идей для проектов на Django. Хотя там в основном высокоуровневое описание проекта без деталей и всего пара ссылок на туториалы, если вам такое актуально - посмотрите https://blog.jetbrains.com/pycharm/2024/09/django-project-ideas/
JetBrains у себя в блоге опубликовали список идей для проектов на Django. Хотя там в основном высокоуровневое описание проекта без деталей и всего пара ссылок на туториалы, если вам такое актуально - посмотрите https://blog.jetbrains.com/pycharm/2024/09/django-project-ideas/