首页 > 编程 > Python > 正文

Python闭包

2019-11-06 07:10:50
字体:
来源:转载
供稿:网友

闭包

一个函数和它的环境变量合在一起,就构成了一个闭包(closure)。在Python中,所谓的闭包是一个包含有环境变量取值的函数对象。环境变量取值被保存在函数对象closure)属性中。

例1

def line_conf(): b = 15 def line(x): return 2*x+b return line # return a function objectb = 5my_line = line_conf()PRint(my_line.__closure__)print(my_line.__closure__[0].cell_contents)

例2

另一个经典的闭包例子:

def line_conf(a, b): def line(x): return a*x + b return lineline1 = line_conf(1, 1)line2 = line_conf(4, 5)print(line1(5), line2(5))

这个例子中,函数line与环境变量a,b构成闭包。在创建闭包的时候,我们通过line_conf的参数a,b说明了这两个环境变量的取值,这样,我们就确定了函数的最终形式(y = x + 1和y = 4x + 5)。我们只需要变换参数a,b,就可以获得不同的直线表达函数。由此,我们可以看到,闭包也具有提高代码可复用性的作用。

如果没有闭包,我们需要每次创建直线函数的时候同时说明a,b,x。这样,我们就需要更多的参数传递,也减少了代码的可移植性。利用闭包,我们实际上创建了泛函。line函数定义一种广泛意义的函数。这个函数的一些方面已经确定(必须是直线),但另一些方面(比如a和b参数待定)。随后,我们根据line_conf传递来的参数,通过闭包的形式,将最终函数确定下来。

例3

def make_adder(addend): def adder(augend): return augend + addend return adderp = make_adder(23)q = make_adder(44)print p(100)print q(100)

运行结果:

123 144

例4

对函数(参数,返回值等)进行加工处理,生成一个功能增强版的一个函数。 python里面的好多高级功能,比如装饰器,生成器,列表推到,闭包,匿名函数等,开发中用一下,可能会达到事半功倍的效果!

参考文章: http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表