闭包的理解
我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包。
闭包的格式
1 def 外层函数(参数): 2 def 内层函数(): 3 print("内层函数执行", 参数) 4 5 return 内层函数 6 7 8 内层函数的引用 = 外层函数("传入参数") 9 内层函数的引用()
外层函数中的参数,不一定要有,据情况而定,但是一般情况下都会有并在内函数中使用到
案例如下:
1 def func(a, b): 2 def line(x): 3 return a * x - b 4 5 return line 6 7 8 line = func(2, 3) 9 print(line(5))
内函数中修改外函数的值
一般在函数结束时,会释放临时变量,但在闭包中,由于外函数的临时变量在内函数中用到,此时外函数会把临时变量与内函数绑定到一起,这样虽然外函数结束了,但调用内函数时依旧能够使用临时变量,即闭包外层的参数可以在内存中进行保留
如果想要在内函数中修改外函数的值,需要使用 nonlocal 关键字声明变量
1 def fun1(a,b): 2 def fun2(x): 3 nonlocal a 4 a = 3 5 return a * x - b 6 7 return fun2 8 9 fun_1 = fun1(2,1) 10 print(fun_1(1))
闭包的用途
Python中,闭包的主要用途就是用于装饰器的实现