如何让Mypy意识到对两个整数进行排序会返回两个整数

时间:2019-06-06 05:26:02

标签: python-3.x int tuples typechecking mypy

我的代码如下:

from typing import Tuple

a: Tuple[int, int] = tuple(sorted([1, 3]))

Mypy告诉我:

  

分配中的类型不兼容(表达式的类型为“ Tuple [int,   ...]“,变量的类型为” Tuple [int,int]“)

我在做什么错? Mypy为什么无法弄清楚排序后的元组将恰好返回两个整数?

1 个答案:

答案 0 :(得分:1)

sorted的调用将产生一个List[int],其中不包含有关长度的信息。这样,从中生成元组也没有有关长度的信息。元素的数量完全不受您使用的类型的定义。

在这种情况下,您必须告诉类型检查器信任您:

a: Tuple[int, int] = tuple(sorted([1, 3]))  # type: ignore

或者,创建一个可识别长度的排序:

 def sort_pair(a: T, b: T) -> Tuple[T, T]:
     return (a, b) if a < b else (b, a)