why syntax change in lambda

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Sep 11 20:09:48 EDT 2013


On Wed, 11 Sep 2013 09:03:49 -0400, Neal Becker wrote:

> In py2.7 this was accepted, but not in py3.3.  Is this intentional?  It
> seems to violate the 'principle' that extraneous parentheses are usually
> allowed/ignored
> 
> In [1]: p = lambda x: x
> 
> In [2]: p = lambda (x): x
>   File "<ipython-input-2-2b94675a98f1>", line 1
>     p = lambda (x): x
>                ^
> SyntaxError: invalid syntax


It is not specific to lambda, it has to do with the removal of argument 
unpacking in function argument lists:

# allowed in Python 2, not in Python 3
def f(a, b, (c, d), e):
    pass


In Python 3, the parser appears to disallow any extra parentheses inside 
the parameter list, even if strictly speaking they don't do anything:

py> def f(a, b, (c), d, e):
  File "<stdin>", line 1
    def f(a, b, (c), d, e):
                ^
SyntaxError: invalid syntax


-- 
Steven



More information about the Python-list mailing list