> PEP 318 is likely to change the BNF productions for funcdef, > so I was taking a look at what is there right now. > > funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite > parameter_list ::= (defparameter ",")* > ("*" identifier [, "**" identifier] | > "**" identifier | defparameter [","]) > defparameter ::= parameter ["=" expression] > sublist ::= parameter ("," parameter)* [","] > parameter ::= identifier | "(" sublist ")" > funcname ::= identifier > > But the text points out that no purely positional (without a > default value) arguments can occur after any keyword arguments. > Is there a reason not to include this in the BNF? > > (Assuming the other productions are unchanged,) this seems to work: > > parameter_list ::= starparameter | > defparameter ("," defparameter)* ["," [starparameter]] | > parameter ("," parameter)* ("," defparameter)* ["," [starparameter]] > > starparameter ::= "*" identifier [, "**" identifier] | > "**" identifier > > defparameter ::= parameter "=" expression This can't work (at least not in the parser -- I don't care what's put in the docs) because parameter and defparameter have the same set of initial tokens. > starparameter was separated out because a trailing comma is permitted > after a positional or default parameter, but not after *args or **kwargs. > > Is there some technical reason not to do this? Not to do what? Allow a comma after *args? > For instance, is the doco autogenerated from the actual code? You should know by now that there are various tools for that, although again maybe you're asking the question in a different context. > Is it somehow cheaper to check for an optional first parameter than > for three possibilities? Who cares? --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4