2021年 6月26日
闭包
# coding=utf-8
#闭包的使用条件:
# 1.函数嵌套
# 2.内部函数使用了外部函数的变量或者参数
# 3.外部函数要返回内部函数,这个使用了外部函数变量的内部函数称为闭包
#闭包的使用条件:
# 函数嵌套
def func_out():
num1 =10
def func_inner():
#内部函数
# 2.内部函数使用了外部函数的变量或者参数
result = num1 + 10
print("结果:",result)
# 3.外部函数要返回内部函数,这个使用了外部函数变量的内部函数称为闭包
return func_inner
# 获取闭包对象
#这个new_func就是闭包
#
new_func = func_out()
#执行闭包
new_func()
结果:20
闭包函数增加参数
# 函数嵌套
def func_out():
num1 =10
def func_inner(num2):
#内部函数
# 2.内部函数使用了外部函数的变量或者参数
result = num1 + num2
print("结果:",result)
# 3.外部函数要返回内部函数,这个使用了外部函数变量的内部函数称为闭包
return func_inner
# 获取闭包对象
#这个new_func就是闭包
#
new_func = func_out()
#执行闭包
#new_func()
new_func(1)
new_func(10)
结果: 11
结果: 20
二.闭包的使用
##encoding=utf8
def config_name(name):
def inner(msg):
print(name + ":" + msg)
print(id(inner))
return inner
# 创建 tom 闭包 实例(对象)
tom = config_name("tom")
#创建jerry闭包实例:
jerry = config_name("jerry")
#如果执行tom闭包因为已经保存了name参数那么以后在输入的时候都是tom:XXX
tom("郭同学,过来下,我们一起玩耍!")
jerry("打死都不去")
tom("我不吃你")
jerry("谁相信你")
1642755283264
1642755282256
tom:郭同学,过来下,我们一起玩耍!
jerry:打死都不去
tom:我不吃你
jerry:谁相信你
#1.函数嵌套:
def func_out():
#外部函数变量
num1 = 10
def func_inner():
nonlocal num1
num1 = 20
result = num1 + 10
print(result)
print("修改前的外部变量:",num1)
func_inner()
print("修改后的外部变量:",num1)