闭包
# 闭包
定义:
在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包
闭包格式:
def 外层函数(参数):
def 内层函数():
print("内层函数执行", 参数)
return 内层函数
内层函数的引用 = 外层函数("传入参数")
内层函数的引用()
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
外层函数中的参数,不一定要有,据情况而定,但是一般情况下都会有并在内函数中使用到
举个例子:
def add():
a = 1
def add_one(b):
return a + b
return add_one
add_one = add()
print(add_one(1))
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
上面的结果:2
原理:
- 内函数中引用外函数的临时变量,此时会将该临时变量与内函数进行绑定,在内存中保留
- 外函数结束了,但临时变量还在,可以被内函数引用
内函数修改外函数的值:使用 nonlocal 关键字
def func(a, b):
def line(x):
nonlocal a
a = 3
return a * x - b
return line
line = func(2, 3)
print(line(5))
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
结果为:12
闭包的用途:
Python 中主要用于装饰器
(完)