Телеграм

Python: задачки и вопросы

@quiz_python Программирование и разработка
РКН: проверяем Иноагент: проверяем
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

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

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

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

Другие наши проекты: https://tprg.ru/media

Статистика обновлена 14.11.2026 в 06:45 · 1 просмотр страницы · Хотите больше просмотров?

Подписчики6 835
Охват поста306 4% от подписчиков
ERR за месяц4,48%
ERR за 24 часа3,19%

Динамика за 30 дней

Рекламные публикации

Рекламных публикаций не найденоЗа последнее время мы не нашли на площадке ни одного рекламного поста.

Последние публикации

Все посты канала →
Python: задачки и вопросы tg6.8 тыс. подписчиков
Открыть пост ↗
Почему request_id снова равен none

1. У request_id задано значение по умолчанию — строка none. В текущем контексте переменную ещё не устанавливали, поэтому первый get возвращает именно эту строку. Она отличается от специального значения None.

2. Вызов set устанавливает req-7 и возвращает Token, который позволяет отменить это изменение. Начиная с Python 3.14 Token поддерживает контекстный менеджер. Поэтому выражение with request_id.set(...) корректно, а внутри блока get возвращает req-7.

3. При выходе из with токен восстанавливает состояние до set. Здесь явно установленного значения раньше не было. Последний get снова обращается к значению по умолчанию и выводит none. Полный вывод: none, req-7, none, каждое значение на своей строке.

Почему это важно
Так можно ограничить идентификатор запроса одной операцией, не оставляя его для последующих вызовов в том же контексте. Это короткая запись привычного set с последующим reset в finally. Токен относится к конкретному изменению, повторно сбрасывать переменную тем же токеном нельзя.

Код проверен в CPython 3.14.4.

Документация Python
👁 153 вчера в 08:51
Python: задачки и вопросы tg6.8 тыс. подписчиков
Открыть пост ↗
Как ForwardRef находит поздний тип

1. В Python 3.14 аннотации по умолчанию вычисляются отложенно. Поэтому функция dispatch объявляется, хотя имя Payload ещё не определено. Импорта future в этом примере нет.

2. get_annotations вызывается до объявления класса. Режим FORWARDREF позволяет вернуть объект ForwardRef для неизвестного имени вместо ошибки при попытке получить его значение. Здесь ref хранит ссылку на Payload. Первый print выводит ForwardRef Payload.

3. Затем выполняется объявление class Payload, и имя появляется в глобальном пространстве модуля. Вызов ref.evaluate() разрешает сохранённую ссылку с учётом этого пространства. Получается тот же объект класса, поэтому проверка is Payload выводит True.

Почему это важно
Реестр плагинов может прочитать аннотации до загрузки всех типов и разрешить недостающие ссылки позже. Важно выбрать подходящий момент: FORWARDREF не создаёт отсутствующий класс. Здесь проверено простое глобальное имя. Чтение и вычисление аннотаций может выполнять код, поэтому этот приём не делает чужие аннотации безопасными.

Код проверен в CPython 3.14.4.

Документация Python
👁 224 12 ноября