所谓闭包,有2中定义。
1.子函数可以使用父函数中的变量
2.一个变量引用者未释放的可执行的代码块。
对第1点先举例:
def line_conf(): def line(x): return 2*x+1 print(line(5)) # within the scope line_conf() print(line(5)) # out of the scope #NameError: name 'line' is not defined
第2点举例:
def line_conf(): def line(x): return 2*x+1 return line # return a function object my_line = line_conf() print(my_line(5))
对于闭包用于处理一些非常特殊的问题。
比如说,我的函数返回一个带有变量的方程。在Java,c++这种语言就很难实现了。
尤其是java里面,函数返回的,只能是一个结果,这个结果必须是一个对象或者是一个值。
通过闭包,这个问题就很好地解决了。
一个函数和它的环境变量合在一起,就构成了一个闭包(closure)。在Python中,所谓的闭包是一个包含有环境变量取值的函数对象。环境变量取值被保存在函数对象的__closure__属性中。比如下面的代码:
def line_conf(): b = 15 def line(x): return 2*x+b return line # return a function object b = 5 my_line = line_conf() print(my_line.__closure__) print(my_line.__closure__[0].cell_contents)
__closure__里包含了一个元组(tuple)。这个元组中的每个元素是cell类型的对象。我们看到第一个cell包含的就是整数15,也就是我们创建闭包时的环境变量b的取值。
一个实际中的闭包case:
def line_conf(a, b): def line(x): return a*x + b return line line1 = line_conf(1, 1) line2 = line_conf(4, 5) print(line1(5), line2(5))
ref:作者:Vamei 出处:http://www.cnblogs.com/vamei
http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html
相关推荐
Python闭包实例closure.py 简单示例闭包的使用 简单示例闭包的使用
python闭包深入(csdn)————程序
Python闭包可能会在面试或者是工作中经常碰到,而提到Python的延迟绑定,肯定就离不开闭包的理解,今天总结下 关于闭包的概念以及一个延迟绑定的面试题。 Python闭包 1、什么是闭包,闭包必须满足以下3个条件: 必须...
python 闭包和装饰器(csdn)————程序
本文实例讲述了Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作。分享给大家供大家参考,具体如下: 实例对象也可以实现闭包的功能,不过实例对象消耗的资源(内存)比闭包多。 demo.py(闭包): # 闭包,...
主要介绍了Python闭包函数定义与用法,结合实例形式分析了Python闭包函数的功能、定义、使用方法及相关操作注意事项,需要的朋友可以参考下
python闭包 关于闭包, 很多blog中都这样解释 :对于一个嵌套定义的函数,外层的函数的返回值是内层函数,而在内层函数中又引用了外层函数的局部变量,在外层函数执行后,其局部变量并非被回收,而会同返回的内层...
主要介绍了Python闭包实现计数器的方法,分析了闭包的概念及实现计数器的相关技巧,需要的朋友可以参考下
python高阶闭包练习题
什么是闭包?如何设置闭包?创建闭包可以用来干什么?闭包的好处,如何正确使用闭包?通过闭包能创建一些只有当前函数能访问的变量,
Python 闭包开发注意事项!关于两个在开发过程中的需要注意的问题。
关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被称为闭包...
python通过本文的介绍,你应该对Python中的闭包有了更深入的理解,并能够开始探索如何在你的项目中应用这一特性。掌握闭包的使用,可以帮助你编写出更加强大和灵活的程序。
闭包可以让使用者访问到函数内部的数据,也就是可以拿到在闭包内所提供的隐藏数据。如果某个功能只需要一个函数,可以使用闭包而不需另创建一个类。第一次将参数传入并 保
作业_python生成器&闭包函数&装饰器.txt 类装饰器&反射 源码