Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python3中键入可变元组_Python 3.x_Types - Fatal编程技术网

Python 3.x 在Python3中键入可变元组

Python 3.x 在Python3中键入可变元组,python-3.x,types,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),(

所以我试着输入一个元组的提示,其中我有这样的东西:

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)
一切都按预期进行。但是我希望默认参数,并且不希望有可变的默认参数。这里也没有任何理由使用可变结构。有什么方法可以做到这一点吗?

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

因此,对于int的可变长度元组的可变长度元组,您的类型注释将是
Tuple[Tuple[int,…],…]

如果在注释中指定元组的唯一原因是您不需要可变的默认参数,那么根据您需要的功能,指定序列序列序列或iterable的iterable可能更合适:

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

元组的长度在语义上是恒定的,所以这里应该使用一个列表。您可以有一个默认值为
None
的可变默认参数,并在函数顶部检查
None