菜鸟笔记
提升您的技术认知

闭包的介绍及使用-ag真人游戏

每日分享:

生活有望穿秋水的等待,也有意想不到的惊喜。

目录

一、闭包

1. 闭包的介绍

2. 闭包的构成条件

3. 闭包示例

4. 闭包的作用

二、闭包的使用

1. 实现步骤

2. 代码实现

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

1. 闭包的介绍

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

闭包的定义:

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

2. 闭包的构成条件

  1. 在函数嵌套的前提下
  2. 内部函数使用了外部函数的变量、参数
  3. 外部函数返回了内部函数

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. 在内部函数里面把人名和说话内容拼接显示

2. 代码实现

def out(name):
    def inner(content):
        print(name   ':'   content)
    return inner
a = out("张三")
b = out("李四")
a("在干嘛?")
b("没干嘛")
a("出去玩吗?")
b("去哪啊")
  •  闭包还可以提高代码的可重用性,不需要再手动定义额外功能的函数
# 定义一个外部函数
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的值没有变化,但最终计算结果变了,这是因为产生了一个局部变量a,它的值为20,应该使用nonlocal关键字(global也不能修改)

# 定义一个外部函数
def func_out():
    a = 10
    # 定义一个内部函数
    def func_inner(b):
        nonlocal a
        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的值发生了变化

网站地图