Python海象运算符可以用于泛型函数的类型提示吗?
假设我想在Python 3.12之前给一个通用函数加上类型提示,那时候还没有新的参数语法:
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:
...
这样的代码运行没有错误,但有些类型库不识别这种语法。写这样的代码有什么缺点呢?
2 个回答
-2
- 只要类型系统在不断进步(朝着更好的方向发展)
- 当你无法控制代码运行或检查的环境时(比如说,一个分散的团队)
我会选择和已有工具保持兼容性:这样可以让你的同事少遇到很多意外。所以:在类型提示中不要用海象运算符 :).