3.闭包


# -*- coding: utf-8 -*-
#__author:jiangjing
#date:2018/1/29

def outer(arg):
def inner():
print(arg)
return inner

if __name__ == '__main__':
inner = outer(5)
inner()
 

执行步骤:

1.调用 outer 函数并且返回内部函数 inner,outer 函数调用完成

2.执行 inner 函数并输出结果:5

分析:

如果是普通函数,在执行第一步完成时,outer 函数作用域里面的局部变量会被释放,但是在执行 inner 函数时为什么还能够使用 arg 变量呢?这就是闭包的作用了,

当 outer 函数的返回值是内部函数的引用时,arg局部变量暂时不会释放。

闭包的用途:

1.装饰器,装饰器是什么?详见下一篇文章;

2.实现单例模式,什么是单例模式?详见下下篇文章。

原文地址:https://www.cnblogs.com/jiangjing/p/8378289.html