[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的时候算是先求值 然后再往里传?
Global site tag (gtag.js) - Google Analytics