Сегодня в прямом эфире Moscow Python Podcast встретимся с сооснователями проекта KeepHQ.dev — Владимиром Филоновым и Матвеем Кукуй, обсудим в выпуске:
Когда и во сколько: 22 ноября в 14:00 по мск
Хитрый Питон - это канал Telegram, который создан для всех любителей и профессионалов в области программирования на языке Python. Под названием "tricky_python" здесь собраны самые интересные и полезные материалы, отобранные лично мной. Меня зовут @korneevm и я страстный читатель, который всегда в поиске новых знаний. Поэтому, я читаю много книг, статей, и блогов, чтобы делиться с вами только самым интересным и актуальным контентом о Python. Если вас интересует мир программирования, а особенно Python, то этот канал обязательно станет вашим источником вдохновения и информации. Присоединяйтесь к нам, чтобы узнавать первыми о новых трендах, инструкциях, и возможностях, которые открывает перед нами этот удивительный язык программирования!
22 Nov, 07:15
19 Nov, 07:52
19 Nov, 02:42
31 Oct, 13:54
30 Oct, 10:24
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
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;
};
co_consts
:
op(_LOAD_SMALL_INT, (-- value)) {
PyObject *val = PyLong_FromLong(this_instr->oparg);
value = sym_new_const(ctx, val);
}
int
тип.22 Oct, 04:16
asyncio.to_thread
и предсказуемо получил хорошее ускорение по сравнению с GIL-версией. Конкретно в его случае - в 3 раза.17 Oct, 04:02
09 Oct, 05:13
08 Oct, 07:12
--disable-gil
, но если очень хочется поиграться, то можно поставить 3.13.0rc3t
с помощью pyenv. Производительность пока замерять рановато, потому что сам по себе питон в free-threaded режиме на 20% медленнее обычного из-за проблем с garbage collector-ом, мы с Никитой Соболевым довольно подробно в подкасте про это говорили, в 3.14 должны поправить, а для тестирования совместимости с библиотеками это пока не важно.--enable-experimental-jit
. На самом деле если его включить, то какой-то пользы для себя вы не увидите, так как для работы ему требуются "шаблоны", которые будут заменять куски байт-кода на машинный код, а их еще требуется написать. Собственно, его, как и nogil включили в релиз для того, чтобы можно было экспериментироватьdjango.py
и я в другом файле пробую импортировать что-то из реальной джанги `from django import forms`)exit
без скобочек 🙂Generator[int, None, None]
- можно просто Generator[int]`), возможность объявить атрибут TypedDict-а как `ReadOnly
и TypeIs
для более строгой проверки типовglob("**")
из pathlib теперь показывает файлы и папки рекурсивно (раньше показывал только папки), привели в соответствие с тем, как это реализовано в большинстве других инструментов, например ls **
04 Oct, 03:28
03 Oct, 03:14
12 Sep, 10:28
09 Sep, 05:03
pyproject.toml
везде, где это возможно. Я с автором в этом согласен, например у меня на работе как минимум во всех новых проектах pyproject.toml
используется по умолчанию.22 Aug, 08:01
uv
в котором добавили много нового:uv
может создавать более сложные файлы зависимостей и самое главное - они теперь кроссплатформенные. Например, если файл создавался, скажем, на маке он будет содержать также хеши для версий пакетов для Linux и Windows и также пакеты, которые нужны только доя конкретной платформы буду указаны и установлены только для нее. Они говорят, что формат файла standart complient но я не совсем понял на какой именно стандарт они тут ссылаютсяuv
uv
другие консольные команды по аналогии с pipx
, например uvx ruff check
09 Aug, 09:49
querystring
, который позволяет в шаблоне легко добавить новый/заменить значение существующего параметра url-а, сохранив все остальные параметры03 Aug, 10:27
uuid4
то думаю будет полезно расширить кругозор https://www.ntietz.com/blog/til-uses-for-the-different-uuid-versions/uuid
в питоне не поддерживает uuid6
, uuid7
и uuid8
(потому что пока они по факту не приняты как часть RFC), но есть либа uuid-utils
которая реализует все варианты https://github.com/aminalaee/uuid-utils 02 Aug, 07:19
11 Jul, 06:55
05 Jun, 13:34