python 装饰器的奇怪语法规范
Strange syntax specification for python decorators
function definitions 的语法规范:
funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
| "*" [parameter] ("," defparameter)* ["," "**" parameter]
| "**" parameter
| defparameter [","] )
parameter ::= identifier [":" expression]
defparameter ::= parameter ["=" expression]
funcname ::= identifier
似乎表明以下语法有效:
@some.dotted.name(*what : "is this")
def my_func(x):
pass
但解释器不接受。是我看错语法了,还是语法不对?
我觉得这像是一个文档错误。
是
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
直到 v3.2,当 argument_list
更改为 parameter_list
。这不可能是正确的,尽管提交 one-line patch 的人显然不这么认为。
grammar itself没有修改。它仍然说:
decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
因为那是:
the full Python grammar, as it is read by the parser generator and used to parse Python source files
我想我们可以得出结论,Python 装饰器仍然具有我们所期望的语法。
function definitions 的语法规范:
funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
| "*" [parameter] ("," defparameter)* ["," "**" parameter]
| "**" parameter
| defparameter [","] )
parameter ::= identifier [":" expression]
defparameter ::= parameter ["=" expression]
funcname ::= identifier
似乎表明以下语法有效:
@some.dotted.name(*what : "is this")
def my_func(x):
pass
但解释器不接受。是我看错语法了,还是语法不对?
我觉得这像是一个文档错误。
是
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
直到 v3.2,当 argument_list
更改为 parameter_list
。这不可能是正确的,尽管提交 one-line patch 的人显然不这么认为。
grammar itself没有修改。它仍然说:
decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
因为那是:
the full Python grammar, as it is read by the parser generator and used to parse Python source files
我想我们可以得出结论,Python 装饰器仍然具有我们所期望的语法。