在Python 3.8+中使用未打包参数的正确方式



请考虑Python 3.8+中的以下示例。假设一个函数有任意数量的参数,所有参数都是相同的类型。例如

def fun(*foos):
for foo in foos:
foo.do_something()

我想为foos参数添加类型,因此假设所有参数都是相同类型的foo_type。正确的打字方式是什么?

对于我来说,下面是很明显的输入:

from typing import Tuple
def fun(*foos: Tuple[foo_type]) -> None:
for foo in foos:
foo.do_something()

我的IDE (CLion)建议:


def fun(*foos: foo_type) -> None:
for foo in foos:
foo.do_something()

输入foos参数的哪种方式是正确的,为什么?

我不确定是什么提示了这个问题,答案是(正如您的IDE已经告诉您的):

def fun(*foos: foo_type) -> NoReturn:
for foo in foos:
foo.do_something()

如果你有这样的东西:

def fun(foos: Tuple[foo_type]) -> NoReturn:
for foo in foos:
foo.do_something()

这也可以工作,但当然,这需要使用foo_type元素的实际元组调用函数。

fun(*foos: foo_type)中,未打包的foos被定义为foo_type,这就是您想要的。如果你这样做:

def fun(*foos: Tuple[foo_type]) -> NoReturn:
for foo in foos:
foo.do_something()

那么你会得到错误,因为一个元组没有do_something()(除非你给它一个),但你仍然会得到类型提示。

相关内容

  • 没有找到相关文章

最新更新