假设我想在 3.12 之前的 Python 中输入一个泛型函数,当时引入了新的参数语法:
def max[T](args: Iterable[T]) -> T:
...
然后我可以选择使用字符串类型提示:
def max(args: Iterable["T"]) -> "T":
...
或输入变量:
T = TypeVar("T")
def max(args: Iterable[T]) -> T:
...
我更喜欢后一种方法,但是引入额外的全局变量绝对是一个缺点。我决定将泛型类型提示与海象运算符结合起来,如下所示:
def max(args: Iterable[T := TypeVar("T")]) -> T:
...
或者
def max(args: Iterable[T := int | float]) -> T:
...
这样的代码运行时没有错误,但某些类型库无法识别此语法。编写这样的代码有什么缺点?
我会选择与现有工具兼容:这会给你的同事带来很多惊喜。所以:类型提示中没有海象:)。