gpt4 book ai didi

python - 哪个语法规则匹配 def foo(a, *, b=10) 复合语句?

转载 作者:太空狗 更新时间:2023-10-30 02:58:12 26 4
gpt4 key购买 nike

The formal syntax for函数定义中的参数如下:

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] 似乎不单独匹配这种情况

我在这里错过了什么?

最佳答案

正式语法似乎缺少左括号。最后一个关闭的不匹配任何东西,如果你看the Python 2 version ,这很有意义:

parameter_list ::=  (defparameter ",")*
( "*" identifier ["," "**" identifier]
| "**" identifier
| defparameter [","] )

所以只要把它读成:

parameter_list ::=  (defparameter ",")*
( "*" [parameter] ("," defparameter)* ["," "**" parameter]
| "**" parameter
| defparameter [","] )

有人可能在重新调整内容时用 | 替换了 (

关于python - 哪个语法规则匹配 def foo(a, *, b=10) 复合语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34853390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com