在Python3中键入Variadic元组

时间:2018-05-10 17:22:39

标签: python-3.x types

所以我正在尝试输入提示一个元组元组,我有这样的东西:

from typing import List, Tuple
def foo(arg: Tuple[Tuple[int]]):
    for tpl in arg:
        for thing_id in tpl:
            # do stuff

元组的元组中可以有多个元组,元组中可以有多个整数,但只应该有一个整数元组的元组。换句话说,我希望这两个都有效:

foo(((1,),))

foo(((1,2,3),(4,5))) # doesn't pass the checker which expects length == 1

但这会失败

foo(((1,"x"),))

现在我可以使用列表:

def bar(arg: List[List[int]]):
    print(arg)

一切都按预期工作。但我想默认参数,并且不希望有一个可变的默认参数。也没有任何理由在这里使用可变结构。有什么办法吗?

1 个答案:

答案 0 :(得分:0)

From the docs

  

要指定同类型的可变长度元组,请使用文字省略号,例如: Tuple[int, ...]

因此,对于可变长度的整数元组的可变长度元组,您的类型注释将为Tuple[Tuple[int, ...], ...]

如果你在注释中指定元组的唯一原因是你不想要一个可变的默认参数,那么它可能更适合指定一系列序列,或者可迭代的迭代,这取决于你需要什么功能:

arg: Iterable[Iterable[int]]=((1, 2), (3, 4))