Mypy型串连元组

问题描述 投票:2回答:3

我有一个函数,具体的元组并连接,我试图指定输出的类型,但是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]")

我的猜测是正确的,但更通用的,因为我指定我的投入。

python mypy
3个回答
3
投票

这是一个known issue,但似乎没有时间表使mypy做正确的类型推断。


1
投票

固定长度的元组的级联目前不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

0
投票

这里是一个-冗长更少的解决方法(python3.5 +):

from typing import Tuple

def f(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
    return (*a, *b)
© www.soinside.com 2019 - 2024. All rights reserved.