1. 闭包
1. 定义
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,使用外部函数变量的内部函数称为闭包。
2. 闭包构成条件
- 函数嵌套
- 内部函数使用外部函数的变量
- 外部函数返回内部函数
3. 示例
# 外部函数
def func_out():
# 外部函数变量
num1 = 10
# 内部函数
def func_in():
# 内部函数使用外部函数变量
print(num1)
# 返回内部函数
return func_in
new_func = func_out()
new_func()
# 输出结果
10
2. 闭包的使用
# 外部函数
def func_out(name):
def func_in(msg):
print(name + ":" + msg)
# 返回内部函数
return func_in
tom = func_out("Tom")
robot = func_out("Robot")
tom("1+1=?")
robot("2")
tom("1+2=?")
robot("3")
# 输出结果
Tom:1+1=?
Robot:2
Tom:1+2=?
Robot:3
3. 修改闭包内使用的外部变量
# 外部函数
def func_out():
num = 10
def func_in():
# 在闭包内修改外部函数的变量需要使用nonlocal关键字
nonlocal num
num = 20
print(num + 10)
print("修改前:" + str(num))
func_in()
print("修改后:" + str(num))
# 返回内部函数
return func_in
func_out()
# 输出结果
修改前:10
30
修改后:20