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

问题描述 投票:0回答:1

我的代码如下:

from typing import Tuple

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

Mypy 告诉我:

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

我做错了什么?为什么 Mypy 无法计算出排序后的元组将返回两个整数?

python python-typing mypy
1个回答
5
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.