Python闭包

来源:互联网 发布:日系男装淘宝 知乎 编辑:程序博客网 时间:2024/06/17 19:44

闭包

一个函数和它的环境变量合在一起,就构成了一个闭包(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

0 0