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中用来实现闭包的方法也就是嵌套函数,并将函数作为返回值返回。看完这些是不是觉得闭包很简单呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值