仅关键字参数

3 python

参考http://docs.python.org/3/glossary.html#term-parameter

keyword-only参数:指定只能由关键字提供的参数.可以通过在它们之前的函数定义的参数列表中包含单个var-positional参数或bare*来定义仅关键字参数,例如下面的kw_only1和kw_only2:

def func(arg, *, kw_only1, kw_only2):
Run Code Online (Sandbox Code Playgroud)

而不是单个var-location参数不应该是单个var-keyword参数?也许我理解错了......

Mar*_*ers 5

不,您必须使用* bare参数,或使用*args称为var-positional参数的单个参数(请参阅该词汇表条目中的下一项).通过将其添加到函数签名,可以强制其后面的任何参数为仅关键字参数.

所以函数签名可以是:

def func(positional_arg1, *variable_args, kw_only1, kw_only2):
Run Code Online (Sandbox Code Playgroud)

并且variable_args将捕获任何额外的位置传递给函数的参数,或者你可以使用:

def func(positional_arg1, *, kw_only1, kw_only2):
Run Code Online (Sandbox Code Playgroud)

并且该函数不支持超出第一个的额外位置参数.

在这两种情况下,您都可以设置kw_only1并且kw_only2 在调用时将它们用作关键字参数func().没有默认值(=<expression>在他们的定义中没有),它们仍然是必需的参数.