Почему код печатает True (TypeVar и len в Python)
@python_quizРазберем этот квиз
Коротко: приведённый фрагмент кода сравнивает длину двух строк — результат будет True. Разберём почему, и почему элементы модуля typing тут никак не влияют на выполнение.
Исходный код

Что здесь происходит по шагам:
TypeVar('T')создаёт объект, используемый для статической типизации (аннотаций). В рантайме это просто объект и он не меняет поведение программы."123"— строка длины 3,len("123")возвращает 3.str(10)преобразует число 10 в строку"10", у которой длина 2, значитlen(str(10))возвращает 2.- Сравнение
3 > 2даёт True, соответственно печатается True.
Вы можете легко проверить это:

Роль TypeVar и модуля typing
- TypeVar и другие конструкции из модуля typing предназначены для статического анализа кода (mypy, Pyright и т.п.).
- На выполнение выражений они обычно не влияют — они не перестраивают объекты и не вызывают ошибок во время выполнения просто потому, что использованы.
- В данном примере объявление
T = TypeVar('T')никак не участвует в вычислении выражения сlen.
Анализ вариантов ответов (логика)
- Утверждение, что вывод будет True, потому что 3 > 2 — соответствует фактическому поведению программы.
- Утверждение, что вывод будет False, основано на неверном подсчёте длин строк.
- Утверждения, что будет ошибка времени выполнения из-за Protocol или Generic, не применимы: в коде нет использования Protocol или Generic в смысле, который мог бы вызвать ошибку, а декларации типов сами по себе не приводят к runtime-ошибкам в таком контексте.
Выводы и практические советы
- Не путайте аннотации типов и механики выполнения: TypeVar — инструмент для статического анализа, не для изменения логики во время запуска.
- Если нужно проверить поведение программы — ориентируйтесь на фактические вычисления (в данном случае len и str).
- Для отладки подобных случаев полезно распечатать промежуточные значения (len каждого выражения), чтобы явно увидеть, что и как сравнивается.
Небольшая шпаргалка:
- str(10) -> "10", len -> 2
- "123" -> len 3
- 3 > 2 -> True
Конец.