闭包

一、闭包

1. 闭包的介绍
函数调用完,函数内定义的变量都会被销毁,但有时候我们需要保存函数内的这个变量,每次在这个变量的基础上完成一系列的操作

闭包的定义:

在函数的嵌套下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,那么这个使用外部函数变量的内部函数称为闭包

2. 闭包的构成条件
在函数嵌套的前提下
内部函数使用了外部函数的变量、参数
外部函数返回了内部函数
3. 闭包示例

# 定义一个外部函数
def func_out():
    a = 1
 
    # 定义一个内部函数
    def func_inner(b):
        sum = a + b
        print("结果是:", sum)
    return func_inner
 
 
# 获取闭包对象,这里的new_func就是func_inner,也就是闭包
new_func = func_out()
# 执行闭包
new_func(1)
new_func(2)

  运行后为 

 

 

通过结果可以看出,闭包保存了外部函数func_out内的变量a,每次执行闭包都是在a=1的基础上进行计算

4. 闭包的作用

  • 闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁

注意:

  • 由于闭包引用了外部函数的变量,则外部函数的变量就没有及时释放,会消耗内存

二、闭包的使用

用闭包实现两个人的对话:

1. 实现步骤

  1. 定义外部函数接收不同的人名信息
  2. 定义内部函数接收对话信息
  3. 在内部函数里面把人名和说话内容拼接显示
def out(name):
    def inner(content):
        print(name + ':' + content)
    return inner
 
 
a = out("张三")
b = out("李四")
a("在干嘛?")
b("没干嘛")
a("出去玩吗?")
b("去哪啊")

  

 

 闭包还可以提高代码的可重用性,不需要再手动定义额外功能的函数

三、nonlocal修改闭包内使用的外部变量

# 定义一个外部函数
def func_out():
    a = 10
 
    # 定义一个内部函数
    def func_inner(b):
        a = 20
        sum = a + b
        print("结果是:", sum)
    print("调用函数前a的值:", a)
    func_inner(10)
    print("调用函数后a的值:", a)
    return func_inner
 
 
# 获取闭包对象,这里的new_func就是func_inner,也就是闭包
new_func = func_out()
# 执行闭包
new_func(10)

  

 

 可以看到,调用前后a的值发生了变化

posted @ 2022-05-13 00:26  南北t  阅读(48)  评论(0)    收藏  举报