Why lambda in loop requires default?

Jussi Piitulainen jussi.piitulainen at helsinki.fi
Sun Mar 27 10:16:23 EDT 2016


gvim writes:
> Given that Python, like Ruby, is an object-oriented language why
> doesn't this:
>> def m():
> a = []
> for i in range(3): a.append(lambda: i)
> return a
>> b = m()
> for n in range(3): print(b[n]()) # => 2 2 2

I'm going to suggest two variations that may or may not work for you,
with very brief glosses. Just ignore them if you don't see their
relevance.
First, consider:
def w():
 a = []
 for i in range(3): a.append(lambda: i)
 i = "!"
 return a
b = w()
for f in b: print(f()) # => ! ! !
(Those functions depend on the i in the loop.)
> lambda i=i: i
>> ... is needed to make it work in Python. Just wondered why?

And second, consider: lambda x=i: x
(Those functions are independent of the i in the loop.)


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /