【发布时间】:2016-01-18 11:15:43
【问题描述】:
函数定义中参数的The formal syntax如下:
parameter_list ::= (defparameter ",")* #[1]
| "*" [parameter] ("," defparameter)* ["," "**" parameter] #[2]
| "**" parameter #[3]
| defparameter [","] ) #[4]
(为清楚起见,我添加了#[num])
Where |, according to the notation, indicates alternatives.
我看不出它与以下函数定义的匹配程度:
def foo(a, *, b=10): pass
假设def foo(a, *, b=10) 形式的定义属于#[2] 的明显规则,它允许* 表示法分隔仅关键字参数。
但我认为foo 的规则必须是#[1] 和#[2] 的组合:
parameter_list ::= (defparameter ",")* "*" [parameter] ("," defparameter)* ["," "**" parameter]
由于规则 #[1] 和 #[2] 似乎并不能单独匹配这种情况。
我在这里错过了什么?
【问题讨论】:
-
你在下面阅读了吗? 如果一个参数有一个默认值,那么直到“*”之前的所有参数也必须有一个默认值—— 这是一个语法限制,没有被语法表达。
-
这不是简单地说明
def foo(*, a, b=10)形式的调用是非法的吗? -
看起来是错的,除非我也遗漏了什么。最后一个右括号没有对应的左括号。
-
@Jim 有趣。我不确定,但我想它一定是#2。 (等待答复)
-
哦该死的,世界将走向何方?文档中的错别字!
标签: python python-3.x syntax