Die Syntax-Spezifikation für function definitions:merkwürdige Syntax-Spezifikation für Python Dekorateure
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
scheint folgendes vorschlagen, ist syntaktisch gültig:
@some.dotted.name(*what : "is this")
def my_func(x):
pass
Doch ist es nicht vom Interpreter akzeptiert. Lies ich die Grammatik falsch oder ist die Grammatik nicht korrekt?
Verdächtige dies ist ein Fehler: https://bugs.python.org/issue27042 - nur Python 3 macht diesen Anspruch – Eric
Ich habe einen Verweis auf den fehlerhaften Patch in meine Antwort, jetzt, wo ich die Zeit hatte, um es aufzuspüren . Ich weise auch darauf hin, dass die Grammatik selbst (d. H. Die Eingabe in den Parser-Generator) nicht geändert wurde und Argill definitiv sagt. – rici