相同类型的多个参数的类型提示?

pst*_*tix 3 python type-hinting

除了以下方法之外,还有其他方法可以输入相同类型的提示参数:

def foobar(a: int, b: int, c: int, d: str): ...
Run Code Online (Sandbox Code Playgroud)

也许是这样的:

def foobar([a, b, c]: int, d: str): ...
Run Code Online (Sandbox Code Playgroud)

显然是概念性的,但可以减少重复的类型提示

Car*_*ate 5

我所知道的唯一方法涉及以某种方式“打包”参数。

由于 var-args 的工作原理,您可以稍微改变顺序并将参数作为 var-args:

def foobar(d: str, *args: int): …
Run Code Online (Sandbox Code Playgroud)

args现在保存ab、 和c(以及传递的其他内容)。

同样,您可以传入一个列表:

from typing import List

def foobar(args: List[int], d: str): …
Run Code Online (Sandbox Code Playgroud)

这本质上与上面相同。

当然,这两者都存在严重的缺点,即您不再能够静态检查数量;可以说,这比无法静态检查类型更糟糕。

您可以通过使用元组来确保长度来稍微解决这个问题:

from typing import Tuple

def foobar(args: Tuple[int, int, int], d: str): …
Run Code Online (Sandbox Code Playgroud)

但是,当然,这与原始代码一样多的重复(并且需要将参数打包到元组中),因此实际上没有任何好处。

我不知道有什么“安全”的方法可以做到你真正想做的事。