为相同类型的多个参数键入提示?
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
现在包含 a
、b
和 c
(以及传递的任何其他内容)。
按照同样的思路,您可以传入一个列表:
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
是否有另一种输入相同类型的提示参数的方法,除了:
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
现在包含 a
、b
和 c
(以及传递的任何其他内容)。
按照同样的思路,您可以传入一个列表:
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