Explanation of this Python language feature? [x for x in x for x in x] (to flatten a nested list)
Marko Rauhamaa
marko at pacujo.net
Mon Mar 24 18:43:11 EDT 2014
Mark H Harris <harrismh777 at gmail.com>:
> Yes, its about closures, totally; the most confusing aspect of
> lambda in python is not only the syntax but the idea of scope and
> closure (for that syntax). Everyone is confused by this initially, not
> because its complicated, but because its confusing. An example:
>
>>>>> adders= list(range(4))
>>>>> for n in adders:
>> adders[n]=lambda a: a+n
>>>>> print(adders[1](3))
>> 6
>
> The expected value as perceived by "normal" people is 4.
1. No, I don't think that understanding is automatically natural.
2. It does not concern Python only. For example, what does this scheme
expression yield?
((let ((n 3))
(let ((f (lambda () n)))
(set! n 7)
f)))
Answer: 7
3. It doesn't concern lambda only. For example, rewrite your loop like
this:
for n in range(4):
def add(a):
return a + n
adders[n] = add
adders[1](3)
=> 6
Marko
More information about the Python-list
mailing list