Java教程

函数内部的匿名函数被调用

本文主要是介绍函数内部的匿名函数被调用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

def multipliers():
  return [lambda x : i * x for i in range(4)]

print [m(2) for m in multipliers()]


#执行结果:

[6, 6, 6, 6]

说明:

  上面代码输出的结果是[6, 6, 6, 6] (不是我们想的[0, 2, 4, 6])。

  上述问题产生的原因是Python闭包的延迟绑定。这意味着内部函数(函数内部返回的匿名函数)被调用时,参数的值在闭包内进行查找。因此,当任何由multipliers()返回的函数被调用时,i的值将在附近的范围进行查找。那时,不管返回的函数是否被调用,for循环已经完成,i被赋予了最终的值3。

  因此,每次返回的函数乘以传递过来的值3,因为上段代码传过来的值是2,它们最终返回的都是6(3*2)。

这篇关于函数内部的匿名函数被调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!