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
- Python中的闭包
- python中的闭包
- python学习~闭包
- python中的闭包
- python闭包详解
- python的闭包
- python 闭包
- python 闭包
- Python中的闭包
- Python中的闭包
- Python中的闭包
- python 闭包
- python中的闭包
- Python 闭包
- python中的闭包
- Python闭包Closure
- python闭包
- python中的闭包
- vc6.0创建与调用dll
- 洛谷 1339 热浪
- Windows+Caffe(Faster RCNN/RFCN/SSD)编译(Cuda7.5+Cuda8.0)未完待续
- java中hashCode方法与equals方法
- SpringMVC源码分析--文件上传
- Python闭包
- BOM 和 DOM
- webpack的使用
- 63. Unique Paths II
- this 浅谈
- Xcode8上架辛酸史
- 如何得到比AlexNet更简单但是性能更好的网络?
- 洛谷 1288 取数游戏
- Ansible 系列之 Playbooks 剧本 (1)