如何注释可变参数函数的参数?
示例:
def foo(*args): # Each arg expected to be of type T
...
是否有任何打字注释?
答案 0 :(得分:2)
在python文档中,没有关于...
aka Ellipsis
的用法的详细信息,但PEP-484在输入注释时确实提到了省略号的各种用法,例如省略某些类型注释或默认值但最有趣的是有qoute说:
元组,用于列出元素类型,例如
Tuple[int, int, str]
。空元组可以输入为Tuple[()]
。任意长度 同构元组可以用一种类型和省略号来表示 示例Tuple[int, ...]
。 (...
这里是语法的一部分,a 字面省略号。)
所以答案是:
def foo(*args: Tuple[T, ...]):
...
由于齐次元组意味着它的所有元素必须属于同一类型,因此如果您希望允许多种类型,只需使用Union
或甚至使用类型别名以获得更好的可读性:
MyArg = Union[int, str, bool]
def foo(*args: Tuple[MyArg, ...]):
...
<强>更新强>
好像我错过了PEP-484中的另一个quote:
在函数foo的主体中,变量args的类型推导为
Tuple[str, ...]
,变量kwds的类型为Dict[str, int]
。
因此,您可以省略类型周围的Tuple[ ,...]
,然后:
MyArg = Union[int, str, bool]
def foo(*args: MyArg):
...
在语义上具有相同的含义。
答案 1 :(得分:0)