[python语法语义] lambda还真是晕啊
boyxuper
2011-01-13
>>> def show_number(j):
... print 'shown says int: %d @0x%d' % (j, id(j)) ... >>> lambdas=[] >>> def test_lambda(): ... print "each element in xrange(5) is" ... x = xrange(5) ... for i in x: ... shown(i) ... print 'testing lambda' ... for i in x: ... lambdas.append( lambda: show_number(i) ) ... #到了这行敲del(i)会被提示错误 ... #SyntaxError: can not delete variable 'i' referenced in nested scope >>> test_lambda() 实际上lambda的那个i引用的是i这个符号, 而不是i的值 然后就晕了 一个变量的值是另一个对象的引用 而如果 (lambda j: lambda: show_number(j))(i) 则就是传进去的i当前的值(即另一个对象的引用) so 传进去外层lambda的时候算是先求值 然后再往里传? |