一、闭包的定义
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
二、闭包的构成条件
通过闭包的定义,我们可以得知闭包的形成条件:
1、在函数嵌套的前提下
2、内部函数使用了外部函数的变量(还包括外部函数的参数)
3、外部函数返回了内部函数,这个使用了外部函数变量的内部函数称为闭包
三、闭包的例子
-
-
- def func_out():
- # 外部变量
- num1 = 10
-
- def func_inner(num2):
- result = num1 + num2
- print('结果是:', result)
-
- return func_inner
-
-
- func_new = func_out()
- func_new(11)
四、闭包的作用:
闭包可以保存外部函数内的变量,不会随着外部函数的调用完而销毁
注意点:
由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存。只有当闭包使用完后,外部变量才会释放
五、闭包的使用:
-
-
- def config_name(name):
-
- def inner(msg):
- print(name + ":" + msg)
-
- return inner
-
- # 执行tom相当于 执行的是inner
- tom = config_name("tom")
- jerry = config_name("jerry")
- tom("你过来啊")
- jerry("过来干什么")
六、闭包修改外部函数的变量
在闭包内修改外部函数的变量需要使用nonlocal关键字
-
- def func_out():
- num1 = 10
-
- def func_inner():
-
- nonlocal num1
- num1 = 20
- result = num1 + 10
- print(result)
-
- return func_inner
-
-
- new_func = func_out()
- new_func()