[Python-ideas] Allow lambda decorators

Guido van Rossum guido at python.org
Mon Feb 9 19:12:43 CET 2009

On Mon, Feb 9, 2009 at 10:05 AM, spir <denis.spir at free.fr> wrote:
> Le Mon, 9 Feb 2009 09:09:18 -0800,
> Guido van Rossum <guido at python.org> a écrit :
>>   fs = []
>>   for new i in range(10):
>>     def f():
>>       return i
>>     fs.append(f)
> The difference I see between such an iteration-specific loop variable and a "declarative" version is that in the latter case it is possible to choose which name(s), among the ones that depend on the loop var, will actually get one "cell" per iteration -- or not. Hem, maybe it's not clear...
> For instance, using a declaration, it may be possible to write the following loop (I do not pretend 'local' to be a good lexical choice ;-):
> funcs = []
> for item in seq:
>        local prod      # this name only is iteration specific
>        prod = product(item)    # ==> one prod per item
>        def f():
>                return prod
>        funcs.append(f)
>        if test(item):
>                final = whatever(item)  # non-local name
>                break
> print "func results:\n%s\nend result:%s" \
>        %([f() for f in funcs],final)
> I do not like global & non-local declaration (do not fit well the overall python style, imo). So I would not like such a proposal, neither. But I like the idea to select names rather than a loop-level on/off switch.

You could use "new prod" for this. Or you could use "var prod" and
change the "for" proposal to "for var". It's a slippery slope though
-- how often do you really need this vs. how much more confusion does
it cause. You would need rules telling the scope of such a variable:
with "for new" that is easy, but what if "var foo" is not nested
inside a loop? Then it would essentially become a no-op. Or would it
introduce a scope out of the nearest indented block? This quickly
becomes too hairy to be attractive.

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-ideas mailing list