Martin Manns wrote:
After being confused I figured out it is a 3.x example:
Actually, it is a compatibility example between 2.x and 3.x, compare
below for different behavior from two seemingly identical compatible
constructs, one from 3.2, and the other from 2.6.4:
Python 3.2 (r32:88445, Mar 29 2011, 21:33:57)
[GCC 4.3.3] on linux2
fs=[]
fs = [(lambda n: i + n) for i in range(10)]
[fs[i](1) for i in range(10)]
[10, 10, 10, 10, 10, 10, 10, 10, 10, 10] <=========== compare
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)
[GCC 4.4.1] on linux2
fs=[]
fs = [(lambda n: i + n) for i in range(10)]
[fs[i](1) for i in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <=========== compare
Having compared the two, someone please tell me whether the two
are incompatible, mostly compatible, completely incompatible, or
different languages...
,.,, I realize how 3.2 is working (at the moment) but as compared
with the books, and the behavior of 2.6, it sure looks 'broke' to me...
... why would we want to defer lookup of the 'i' in range(10) until the
anonymous function is called, instead of the time that the function
object is returned... inquiring minds want to know...
PS Ian calls the second construct "working by mistake..."
kind regards,
m harris
--
http://mail.python.org/mailman/listinfo/python-list