Python Glossary English

Python 3.5+Аннотации и typingпонятие

typing.TypeVar

generics

Переменная типа для создания обобщённых функций и классов. Ограничения задаются через bound= или явный список типов.

Синтаксис

from typing import TypeVar
T = TypeVar('T')
T = TypeVar('T', bound=SomeType)
T = TypeVar('T', int, str)

Смысл TypeVar появляется только тогда, когда одна и та же переменная встречается в сигнатуре минимум дважды — так вы связываете вход с выходом. Если T стоит в одном месте, толку от него нет, это фактически то же самое, что Any. Различайте два вида ограничений: bound=X разрешает X и любых наследников, а перечисление TypeVar('T', int, str) — только ровно int или ровно str, без промежуточных вариантов. В Python 3.12 то же самое пишется короче: def first[T](lst: list[T]) -> T, без отдельного объявления переменной.

Примеры

# Python 3.9+
from typing import TypeVar
T = TypeVar('T')
def first(lst: list[T]) -> T:
    return lst[0]
print(first([1, 2, 3]))  # → 1
print(first(['a', 'b']))  # → 'a'
from typing import TypeVar
N = TypeVar('N', int, float)
def double(x: N) -> N:
    return x * 2
print(double(3))  # → 6
print(double(1.5))  # → 3.0

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности