Bottom Page

Thread Rating:
  • 3 Vote(s) - 2 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 help on understanding this output
#1
>>> flist = []
>>> for i in range(3):
...     flist.append(lambda: i)
...
>>> [f() for f in flist]   # what will this print out?
Why is the above output [2,2,2]?

Thanks,

L
Quote
#2
Python uses "late binding" here. Lambda is defined with variable i, but actual value of i is looked up when that lambda is called. After for loop i is 2, so all lambdas return 2.

Common trick to avoid this is to use such variable as another parameter:

lambda x, i=i : x + i  # <- this binds i to actual value of i
In your case lambda i=i : i would work as "expected".
landlord1984 likes this post
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  understanding output of bytes/raw data rootVIII 3 420 Aug-01-2019, 01:00 PM
Last Post: rootVIII
  Understanding "help()" output? Athenaeum 4 1,288 Sep-29-2017, 09:47 PM
Last Post: nilamo

Forum Jump:


Users browsing this thread: 1 Guest(s)