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

Type hinting for multiple parameters of same type?

是否有另一种输入相同类型的提示参数的方法,除了:

def foobar(a: int, b: int, c: int, d: str): ...

可能是这样的:

def foobar([a, b, c]: int, d: str): ...

显然是名义上的,但可以减少重复类型提示

我知道的唯一方法涉及 "packaging" 参数。

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

def foobar(d: str, *args: int): …

args 现在包含 abc(以及传递的任何其他内容)。

按照同样的思路,您可以传入一个列表:

from typing import List

def foobar(args: List[int], d: str): …

与上面基本相同

当然,这些都带有严重缺点,即您不再具有静态检查元数的能力;这可以说是一个比不能静态检查类型更糟糕的问题。

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

from typing import Tuple

def foobar(args: Tuple[int, int, int], d: str): …

但是,当然,这与您的原始代码有同样多的重复(并且需要将参数打包到一个元组中),所以实际上没有任何收获。

我不知道有什么 "safe" 方法可以按字面意思做你想做的事。

我认为@Carcigenicate 很好地涵盖了这个主题,但由于您的关注主要是符号性的并且只是想让它看起来整洁,您可以考虑改用 hanging indentation

def foobar(a: int,
           b: int,
           c: int,
           d: str):
    pass