记录一个由Python闭包(closure)引发的问题
问题如下图所示:
首先是闭包(closure)的定义:
在函数中嵌套另一个函数,如果内部函数调用了外部函数的变量,则可能产生闭包(closure)
如上图所示,在函数multiply中,嵌套返回了Lambda函数(匿名函数) ,因此产生了闭包现象。
然而,函数multiply的执行结果表明,在返回列表内的四个Lambda函数中,i看起来均为3。
这是因为:
函数multiply返回的4个子函数并没有立刻执行,而是直到调用m(100)时才开始执行,此时i的值为3,因此返回的数值均为3*100。
Reference: