On Fri, Jul 9, 2010 at 8:37 PM, Dino Viehland <di...@microsoft.com> wrote: > Terry wrote: >> This violates the important principle that allowed def and call arg >> sequences should match to the extent sensible and possible. In this >> sense, the SyntaxError is a bug. So I would fix this now for 3.2 and >> notify the other implementors. > > +1 on fixing it - trailing commas are awesome. I'm always annoyed in > C# where I frequently can't use them. This seems like a bug fix level > change that should be easy for the other implementations to fix.
Thanks for all the feedback. If the grammar is changed to allow "def f(*, a,): pass", that still leaves some more open questions: which of the following should be valid? (1) def f(*args,): pass (2) def f(**kwargs,): pass (3) def f(*,): pass Just for the sake of simplicity it would seem to make sense allow all these, even if there's no obvious immediate use; for me, it keeps the mental footprint of the language small---I don't have to remember when the comma is or isn't allowed. Note that (1) and (2) aren't valid (and never have been, as far as I know) in Python 2.x, though. (Neither is (3), of course, since keyword-only arguments are 3.x only.) (3) is a bit subtle: "def f(*): pass" is actually allowed by the grammar, but produces a SyntaxError later on, when the parse tree is converted to AST: >>> def f(*): pass ... File "<stdin>", line 1 SyntaxError: named arguments must follow bare * So it probably doesn't matter much whether (3) is permitted by the grammar or not. -- Mark _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com