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
しかし、それはインタプリタによって受け付けられません。私は文法を誤読しているのですか、あるいは文法が間違っていますか?
これはバグです:https://bugs.python.org/issue27042 - python 3のみがこの申し立てを行います – Eric
誤ったパッチへの参照を私の答えに入れました。 。また、文法自体(パーサージェネレータへの入力)は変更されておらず、間違いなくarglistと言います。 – rici