闭包
定义:内部函数对外部函数变量的引用,则将该函数与用到的变量称为闭包。
闭包必须满足以下三个条件:
- 必须有一个内嵌函数。
- 内嵌函数必须引用外部函数中的变量。
- 外部函数返回值必须是内嵌函数的引用。
def func(num): def func_in(m): print num, m # 结果:10 3 new_num = num ** m return new_num return func_in if __name__ == '__main__': ret = func(10) res = ret(3) print res # 结果:1000
说明:func_in指向func_in()函数,return func_in 将函数的引用返回,用ret接收了这个返回值,ret就指向了func_in所指向的函数体,即func_in()函数。最后调用执行ret所指的函数。这就是闭包的整个过程,func_in()函数以及该函数内用到的变量num就称为闭包。简单说就是如果一个内嵌函数访问了外部嵌套函数作用域内的变量,则这个内嵌函数和用到的变量就称为闭包。将内嵌函数的语句和这些语句的执行环境打包在一起后,得到的函数对象称为闭包。
装饰器