funcs = [] for x in (1, 2, 3): funcs.append(lambda: x) for f in funcs: print f() funcs = [] for x in (1, 2, 3): def myfunc(): return x funcs.append(myfunc) for f in funcs: print f() funcs = [] for x in (1, 2, 3): funcs.append(lambda x=x: x) for f in funcs: print f() funcs = [] for x in (1, 2, 3): def g(x): funcs.append(lambda: x) g(x) for f in funcs: print f() funcs = [] def append_a_func(x): funcs.append(lambda: x) for x in (1, 2, 3): append_a_func(x) for f in funcs: print f() def make_func(x): return lambda: x funcs = [] for x in (1, 2, 3): funcs.append(make_func(x)) for f in funcs: print f()
Tuesday, 31 March 2009
Python variable binding semantics
What do the six following chunks of code do, and what would you like them to do? Which do you prefer?
Subscribe to:
Post Comments (Atom)
1 comment:
I like the second snippet. I want it to print 1 2 3. I don't like lambda's. I don't want to predict what the others will or should print; lambdas are confusing.
Post a Comment