我试图理解这个function
的参数是如何解释的:
def f(a, *, b):
return a, b
这似乎function
强制调用者使用正好 2 个参数调用f()
,并且第二个参数应始终是命名的b=
参数。如何从function
签名中破译这一点?为什么不允许我为*
指定中间参数?
如何从函数签名中破译这一点?
- 必须传递没有默认值的参数。
*
之后的参数如果被传递,则必须通过关键字传递。- 不能传递额外的参数来"填充"
*
,除非参数名称伴随着*
。
由于b
没有默认值,因此必须传递它。 由于它是在*
之后,因此必须通过关键字传递。 由于*
是"裸"的(即,它只是*
占位符,而不是像*args
那样的vararg(,因此没有其他位置参数可以作为"中间"参数传递。
有关仅关键字参数语法的说明,请参阅 PEP 3102。
仅*
是一种仅限 Python3 的方式来表达以下参数是命名参数,并且只能这样传递给函数。
从文档中:
"
*
"或"*identifier
"之后的参数是仅关键字参数,只能传递使用的关键字参数。