闭包: 内部函数对外部函数作用域里变量的引用
(闭包内的闭包函数私有化了变量, 完成了数据的封装, 类似于面向对象)
我们先看一个不是闭包函数的例子:
def func():
print('this is the outer func')
def func1():
print('this is the inner func')
func()
func1()
执行到func1()报错 NameError: name 'func1' is not defined.
这是因为函数内变量的生命周期为函数执行期间, 执行完func()时,func1()生命周期已经结束
下面定义一个闭包函数func():
def func():
a = 1
print('this is the outer func')
def func1(num):
print('this is the inner func')
print('result is:' num + a)
return func1
var = func()
print(var)
var(1)
执行结果:
this is the outer func
<function func.<locals>.func1 at 0x100de7eb0>
this is the inner func
result is: 2
func()返回值为func1, 所以var其实就是func1
通过print(var)的打印结果也可证实: <function func.<locals>.func1 at 0x100de7eb0>
回到文章开头对闭包的定义:
内部函数(func1)对外部函数(func)作用域里变量(a)的引用