闭包
1,闭包的形成条件
(1)函数嵌套
(2)内部函数使用了外部函数的变量或者参数
(3)外部函数返回内部函数这个使用了外部函数变量的内部函数称为闭包
2,闭包的作用
(1)闭包可以保存外部函数内的变量不会随着外部函数调用而销毁
def func_out(): # 1,函数嵌套 num1 = 10 # 外部函数 def func_inner(): # 内部函数 result = num1 + 10 # 2,内部函数必须使用了外部函数的变量 print('结果:',result) return func_inner # 3,外部函数要返回内部函数,这个使用了外部函数变量的内部函数称为闭包 new_func = func_out() # 获取闭包对象 # 这个new_func就是闭包 new_func() # 执行闭包
闭包变量
def func_out(): num1 = 10 def func_inner(num2): result = num1 + num2 print('结果:',result) return func_inner new_func = func_out() new_func(20)
闭包使用
外部函数接收姓名参数 def confing_name(name): # 内部函数保存外部函数的参数并且完成数据显示的组成 def inner(msg): print(name + ":" + msg) return inner # 创建Tom闭包是实例(对象) Tom = confing_name("Tom") # 创建jerry闭包实例 jerry = confing_name('jerry') Tom('回家吃饭拉。。。') jerry('我还不俄。。。')
闭包修改
# 1,函数嵌套 def func_out(): # 外部函数的变量 num1 = 10 def func_inner(): # 在闭包内修改外部函数的变量 # num1 = 20 本意是修改外部函数变量,其实是在闭包内定义了一个局部变量 # 在闭包内修改外部函数的变量需要使用nonlocal关键字 nonlocal num1 num1 = 20 # 2,内部要使用外部函数的变量 result = num1 + 10 print(result) print('修改前的外部变量:',num1) func_inner() print('修改后的外部变量:',num1) # 3,返回内部函数 return func_inner # 创建闭包对象 new_func = func_out() new_func()