[Python-ideas] Allow lambda decorators

Terry Reedy tjreedy at udel.edu
Mon Feb 9 07:03:39 CET 2009


Carl Johnson wrote:
> A few months back there was a discussion of how code like this gives 
> "surprising" results because of the scoping rules:

And solutions were given.

>  >>> def func_maker():
> ...     fs = []
> ...     for i in range(10):
> ...         def f():
> ...             return i
> ...         fs.append(f)
> ...     return fs
> ...
>  >>> [f() for f in func_maker()]
> [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
> 
> Various syntax changes were proposed to get around this, but nothing 
> ever came of it.

Because
a) there is already a trivial way to get the result wanted;
b) proposals are wrapped in trollish claims;
c) perhaps no proposer is really serious.

To me, one pretty obvious way to define default non-parameters would be
to follow the signature with "; <name = expr>+".  Where is the PEP, though?

Enough already.

...

> Thinking about it some more, I've realized that the change I proposed is 
> unnecessary, since we already have the decorator syntax. So, for 
> example, the original function can be made to act with the "expected" 
> scoping by using an each_in function defined as follows:

Such a mess to avoid using the current syntax
Like Guido, my head hurt trying to read it, so I quit.

> What do other people think?

-1

Terry Jan Reedy




More information about the Python-ideas mailing list