python中的闭包
2013-07-23 22:45
197 查看
我相信很多人对于闭包这个东西还是比较模糊的
解释如下:
闭包和嵌套是分不开的,我们从Python的运行原理来看:
python的运行时环境中有一段空间时分配给运行时栈的,(这个栈的大小可以在运行时确定) 。运行时栈中存储的内容有:代码运行需要的栈大小,局部变量,嵌套作用域中使用的变量,外层作用域中变量名的集合,如下图所示,
闭包在维基百科中给出的定义是:一个包含了环境部分和控制部分的实体。其实说到底就是将某个函数所表示的作用域的上一层作用域中的对象与他的作用域中的对象捆绑在一起。这就是为什么一个运行时环境还要为闭包分配空间,因为他加入了由于闭包而引入的上层作用域中的对象。也就是说一个函数所形成的作用域由一些几部分:局部变量,函数参数,闭包所引入的对象。下面举个例子:
这段代码就没有创建闭包,因为其没有引用外部作用域中的变量。
Python中用来实现闭包的方法也就是嵌套函数,并将函数作为返回值返回。看完这些是不是觉得闭包很简单呢?
解释如下:
闭包和嵌套是分不开的,我们从Python的运行原理来看:
python的运行时环境中有一段空间时分配给运行时栈的,(这个栈的大小可以在运行时确定) 。运行时栈中存储的内容有:代码运行需要的栈大小,局部变量,嵌套作用域中使用的变量,外层作用域中变量名的集合,如下图所示,
闭包在维基百科中给出的定义是:一个包含了环境部分和控制部分的实体。其实说到底就是将某个函数所表示的作用域的上一层作用域中的对象与他的作用域中的对象捆绑在一起。这就是为什么一个运行时环境还要为闭包分配空间,因为他加入了由于闭包而引入的上层作用域中的对象。也就是说一个函数所形成的作用域由一些几部分:局部变量,函数参数,闭包所引入的对象。下面举个例子:
def outter(): value="inner" def inner(): print value return inner show=outter() show()上面的执过程就创建了闭包,因为inner这个函数的作用域中引用了其外层作用域中的字符串对象value,这个时候就把外层作用域中的value和inner的作用域捆绑在一起,这个时候就形成了闭包。再看下面这段代码:
def outter(): def inner(): print “Hello world” return inner show=outter() show()
这段代码就没有创建闭包,因为其没有引用外部作用域中的变量。
Python中用来实现闭包的方法也就是嵌套函数,并将函数作为返回值返回。看完这些是不是觉得闭包很简单呢?
相关文章推荐
- Python进阶(四)-浅谈Python闭包
- python闭包
- python 闭包
- python闭包详解+实例演示
- Python学习8--嵌入函数与闭包
- Python3.x的nonlocal、嵌套函数、和闭包
- python成长日迹--闭包
- python中的闭包
- Python-闭包(转载)
- Python之闭包学习笔记
- python 内嵌函数, 闭包, 函数装饰器
- python基础系列(五)之闭包
- Python中的闭包
- Python-16 函数:内嵌函数和闭包
- python闭包学习笔记四
- Python深入学习之闭包
- python的闭包以及闭包在设计里的意图和作用
- Python 闭包
- Python 进阶_闭包 & 装饰器
- 【Python】闭包中一个不易察觉的陷阱