>>> funcs = [ lambda x: x**i for i in range( 5 ) ] >>> print funcs[0]( 2 ) >>> >>> This gives me >>> 16 >>> >>> When I was excepting >>> 1 >>> >>> Does anyone know why? > > Just the way Python lambda expressions bind their variable > references. Inner 'i' references the outer scope's 'i' variable and not > its value 'at the time the lambda got defined'. > > >> And more importantly, what's the simplest way to achieve the latter? :) > > Try giving the lambda a default parameter (they get calculated and > have their value stored at the time the lambda is defined) like this: > funcs = [ lambda x, i=i: x**i for i in range( 5 ) ]
Thanks a lot! I worked around it by def p(i): return lambda x: x**i funcs = [ p(i) for i in range(5) ] But your variant is nicer (matter of taste of course). Cheers, Daniel -- Psss, psss, put it down! - http://www.cafepress.com/putitdown -- http://mail.python.org/mailman/listinfo/python-list