我有一个函数,具体的元组并连接,我试图指定输出的类型,但是mypy不同意我的看法。
文件test.py
:
from typing import Tuple
def test(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
return a + b
运行mypy 0.641如mypy --ignore-missing-imports test.py
我得到:
test.py:5: error: Incompatible return value type (got "Tuple[Any, ...]", expected "Tuple[str, str, int, int]")
我的猜测是正确的,但更通用的,因为我指定我的投入。
这是一个known issue,但似乎没有时间表使mypy
做正确的类型推断。
固定长度的元组的级联目前不mypy
支持。作为一种变通方法,您可以构建从单个元素的元组:
from typing import Tuple
def test(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
return a[0], a[1], b[0], b[1]
或使用unpacking如果你有Python的3.5+:
def test(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
return (*a, *b) # the parentheses are required here
这里是一个-冗长更少的解决方法(python3.5 +):
from typing import Tuple
def f(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
return (*a, *b)