Python:闭包的理解

来源:互联网 发布:域名纠纷 律师 编辑:程序博客网 时间:2024/06/05 22:33

很多函数型的语言都有闭包这一概念,比如python的兄弟js。

人们刚听到闭包这一概念总会觉得它很晦涩,难以理解。其实不然,主要是他的名字起得太抽象了,让人误以为很难。

下面举一个例子:

#coding:utf-8def foo():nums = [0]*5for i in range(5):nums[i] = lambda : i#这里为nums的五个元素绑定了5个函数,函数要返回变量i的值#显然这里的函数并没有立即执行,它只是保存了一段代码而已return numsfor func in foo():print func()#这里执行了保存在nums中的各个函数,此时当这个函数接到执行命令后,它才会#去找i这个变量,它发现本函数作用域内没有,就到上层函数作用域中去找,结果#找到了,它的值是4,所以本例的结果全是4#结果:# 4# 4# 4# 4# 4

想要让它返回我们期望的结果也很简单,只要让它在执行的时候,实时的算出结果不就可以了:

#coding:utf-8def foo():nums = [0]*5for i in range(5):nums[i] = (lambda : i)()return numsfor num in foo():print num#结果:# 0# 1# 2# 3# 4


0 0
原创粉丝点击