我的代码如下:
from typing import Tuple
a: Tuple[int, int] = tuple(sorted([1, 3]))
Mypy 告诉我:
赋值中的类型不兼容(表达式的类型为“Tuple[int, ...]”,变量的类型为“Tuple[int, int]”)
我做错了什么?为什么 Mypy 无法计算出排序后的元组将返回两个整数?
对
sorted
的调用会生成 List[int]
,它不携带有关长度的信息。因此,从中生成元组也没有有关长度的信息。元素的数量根本不取决于您使用的类型。
在这种情况下,您必须告诉类型检查器信任您。使用
# type: ignore
或 cast
无条件接受目标类型为有效:
# ignore mismatch by annotation
a: Tuple[int, int] = tuple(sorted([1, 3])) # type: ignore
# ignore mismatch by cast
a = cast(Tuple[int, int], tuple(sorted([1, 3])))
或者,创建一个长度感知排序:
def sort_pair(a: T, b: T) -> Tuple[T, T]:
return (a, b) if a <= b else (b, a)