在函数的内部定义一个函数。闭包的作用有两点,一是读取函数内部的局部变量,二是不会被垃圾回收机制回收,会一直保存在内存中。
def c():
i = 1
print('init')
def s():
return 1
return s
调用
c1= c()
print(c1())
print(c1())
print(c1())
结果
init
1
1
1
结果显示,只输出了一次init,输出了三次子函数。
改动一下上面的函数,利用闭包的特性来实现一个计数器。
def c():
i = 1
print('__')
def s():
nonlocal i
i += 1
return i
return s
c1= c()
print(c1())
print(c1())
print(c1())
上面的结果
__
2
3
4
当重复执行c1()时,实质是执行的c函数内的s子函数。通过反复执行之后,可以实现重复执行s函数来增加计数。