我最近一直在学习*args
和**kwargs
使用python,我发现在python 3中可以使用bare *
,如标题中的示例所示,表示它之后不允许使用位置参数。
问题是我看不到它如何匹配参考中的正式定义或“参数列表”。参数列表的定义如下:
argument_list ::= positional_arguments ["," keyword_arguments]
["," "*" expression] ["," keyword_arguments]
["," "**" expression]
| keyword_arguments ["," "*" expression]
["," keyword_arguments] ["," "**" expression]
| "*" expression ["," keyword_arguments] ["," "**" expression]
| "**" expression
我认为它有效的唯一方法是为expression
空,但我看不出它是如何发生的。
如果我们假设expression
可以为空,那么以下定义应该是有效的:
def foo(*)
def bar(*,**kwargs)
这些定义没有意义,因为*
它后面需要关键字参数。
因此,我将不胜感激有关该主题的任何澄清。我想念什么?还是上面的 BNF 不太正确?