Iain King <iaink...@gmail.com> wrote: > Sort of tangenitally; is there any real difference between the outcome > of the two following pieces of code? > > a = lambda x: x+2 > > def a(x): > return x+2 >
Disassemble it to see. The functions themselves have identical code bytes, the only difference is the name of the code objects (and that carries through to a difference in the function names). >>> def f(): a = lambda x: x+2 def b(x): return x+2 dis(a) dis(b) >>> from dis import dis >>> dis(f) 2 0 LOAD_CONST 1 (<code object <lambda> at 0119FDA0, file "<pyshell#10>", line 2>) 3 MAKE_FUNCTION 0 6 STORE_FAST 0 (a) 3 9 LOAD_CONST 2 (<code object b at 0119FDE8, file "<pyshell#10>", line 3>) 12 MAKE_FUNCTION 0 15 STORE_FAST 1 (b) 5 18 LOAD_GLOBAL 0 (dis) 21 LOAD_FAST 0 (a) 24 CALL_FUNCTION 1 27 POP_TOP 6 28 LOAD_GLOBAL 0 (dis) 31 LOAD_FAST 1 (b) 34 CALL_FUNCTION 1 37 POP_TOP 38 LOAD_CONST 0 (None) 41 RETURN_VALUE >>> f() 2 0 LOAD_FAST 0 (x) 3 LOAD_CONST 0 (2) 6 BINARY_ADD 7 RETURN_VALUE 4 0 LOAD_FAST 0 (x) 3 LOAD_CONST 1 (2) 6 BINARY_ADD 7 RETURN_VALUE -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list