On Sat, Mar 22, 2014 at 3:39 PM, Rustom Mody <rustompm...@gmail.com> wrote:
>> So if that's not going to be broken, how is this fundamentally different?
>
>> def func_loop():
>>     for x in 1,2,3:
>>         yield (lambda: x)
>
> Thats using a for-loop
> A 'for' in a comprehension carries a different intention, the matching names
> being merely coincidental.

So what you're saying is that these two are fundamentally different:

def unrolled():
    x = 1
    yield (lambda: x)
    x = 2
    yield (lambda: x)
    x = 3
    yield (lambda: x)

def loop():
    for x in 1,2,3:
        yield (lambda: x)

In other words, a loop should be implemented as a separate binding
each time, not a rebinding. That's an interesting point, and it does
make some sense; effectively, what you want is for the body of a for
loop to be a new scope, a unique scope every iteration of the loop,
and one that automatically closes over all variables in the parent
scope (including for assignments) except for the loop
iteration/counter variable.

That does make some sense, but it doesn't really fit Python's concept.
It would, however, fit a more C-like language, where locals are
declared (in Python, you'd have to put a whole lot of implicit
'nonlocal' statements at the top of the loop).

ChrisAg
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to