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
。