Выбор ответа Junior Типизация спрашивают часто обновлено

Проверяет ли Python аннотации при выполнении

Вопрос

Что произойдёт при вызове double("ab"), если функция объявлена как def double(x: int) -> int: return x * 2?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вернётся "abab": аннотации в рантайме не проверяются. Аннотации это метаданные: интерпретатор хранит их в annotations, но не проверяет и ничего не приводит.

Варианты ответа

  1. TypeError при вызове, потому что тип аргумента не совпал
  2. Python приведёт "ab" к int и упадёт с ValueError
  3. Вернётся "abab": аннотации в рантайме не проверяютсяправильный ответ
  4. SyntaxError при импорте модуля

Разбор

Аннотации это метаданные: интерпретатор хранит их в __annotations__, но не проверяет и ничего не приводит. "ab" * 2 законная операция. Ошибку покажет только статический анализатор (mypy, pyright) или библиотека, которая сама валидирует данные, например Pydantic.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.