1. 在函数内部定义一个函数, 并且这个函数用到了外部函数的变量, 那么将这个函数以及用到的一些变量称之为闭包
# 定义一个函数
def test(number):
# 在函数内部定义一个函数, 并且这个函数用到了外部函数的变量, 那么将这个函数以及用到的一些变量称之为闭包
def test_in(number_in):
print("在 test_in 函数中, number_in 是 %s" % number_in)
return test_in
ret = test(20)
print(ret(100))
输出结果:
在 test_in 函数中, number_in 是 100
120
可以这么理解:
20是给参数number
100是给参数number_in
2. 内部函数对外部函数作用域里变量的引用(非全局变量), 则称内部函数为闭包
def counter(start=0):
count = [start]
def incr():
count[0] += 1
return count[0]
return incr
c1 = counter(5)
print(c1())
print(cl())
输出结果:
6
7
3. 闭包优缺
1. 闭包优化了变量, 原来需要类和对象完成的工作, 闭包也能完成
2, 由于闭包引用了外部函数的局部变量, 则外部函数的局部变量没有及时释放, 消耗内存