很多函数型的语言都有闭包这一概念,比如python的兄弟js。
人们刚听到闭包这一概念总会觉得它很晦涩,难以理解。其实不然,主要是他的名字起得太抽象了,让人误以为很难。
下面举一个例子:
#coding:utf-8
def foo():
nums = [0]*5
for i in range(5):
nums[i] = lambda : i #这里为nums的五个元素绑定了5个函数,函数要返回变量i的值
#显然这里的函数并没有立即执行,它只是保存了一段代码而已
return nums
for func in foo():
print func() #这里执行了保存在nums中的各个函数,此时当这个函数接到执行命令后,它才会
#去找i这个变量,它发现本函数作用域内没有,就到上层函数作用域中去找,结果
#找到了,它的值是4,所以本例的结果全是4
#结果:
# 4
# 4
# 4
# 4
# 4
想要让它返回我们期望的结果也很简单,只要让它在执行的时候,实时的算出结果不就可以了:
#coding:utf-8
def foo():
nums = [0]*5
for i in range(5):
nums[i] = (lambda : i)()
return nums
for num in foo():
print num
#结果:
# 0
# 1
# 2
# 3
# 4