Как заставить Mypy понять, что сортировка двух целых возвращает два целых - PullRequest
0 голосов
/ 06 июня 2019

Мой код выглядит следующим образом:

from typing import Tuple

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

Mypy говорит мне:

Несовместимые типы в присваивании (выражение имеет тип "Tuple [int, ...] ", переменная имеет тип" Tuple [int, int] ")

Что я делаю не так? Почему Mypy не может понять, что отсортированный кортеж вернет ровно два целых числа?

1 Ответ

1 голос
/ 06 июня 2019

При вызове 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)
...