Issue 798652: Clarify trailing comma in func arg list (original) (raw)
Current Ref Man 5.3.4 Calls says after grammar: "A trailing comma may be present after an argument list but does not affect the semantics. " But this is not true if arg list ends with *expr or **expr:
dict(*l,) # any function will do since not called File "", line 1 dict(*l,) ^ # points at ')' SyntaxError: invalid syntax dict(**d,) File "", line 1 dict(**d,) ^ # points at ',' SyntaxError: invalid syntax
Suggestion: "If an argument list does not end with *expr or **expr, a trailing comma may be added without affecting the semantics."
The same exception applies to function defs as well as calls, but 7.5 Function definitions does not have a statement such as above. However, the production for parameter_list does end with 'defparameter [","]'. I suggest that this be the first of the parenthesized alternatives, as it logically should be, rather than the last, so it flows better and so that no one (ignorant that '[]' binds tighter than '|') could possible think that the '[,]' applies to the * and ** parts. IE: change
parameter_list ::= (defparameter ",")* ("*" identifier [, "" identifier] | "" identifier | defparameter [","])
to
parameter_list ::= (defparameter ",")* (defparameter [","] |'*' identifier [, "" identifier] | "" identifier)
Squeezing out a line is a suboptimazation.
Logged In: YES user_id=357491
Terry is right that the line is wrong. You can examine the actual Grammar/Grammar file to see that:
varargslist: (fpdef ['=' test] ',')* ('' NAME [',' '' NAME] | '' NAME) | fpdef ['=' test] (',' fpdef ['=' test]) [',']
As you can see the actual grammar does not even have the definition of a 'call' token. Not only that, but the example in the docs is not entirely correct since is says that the * and ** syntax take an 'expression' token which in the grammar in the docs is basically a tuple-like syntax while the official grammar wants a NAME which is defined as a primitive token.
I don't know how extensive of a change is warranted. That one line does need to be changed, but if only that line is changed then the text won't match the example grammar. But since the example grammar does not mirror the real grammar I don't want to go messing with it without Fred weighing in on this.
I am going to assign to Fred to see what he has to say.