python——闭包与闭包中修改外部变量

在函数嵌套的前提下,内部函数引用了外部函数的变量,并且外部函数返回(return)了内部函数,即外部函数返回了引用了外部函数变量的内部函数,这时我们称内部函数为闭包。
比如说如下例子:

# 外部函数
def func_outer(a):
    # 内部函数
    def func_inner(b):
        c = a + b
        return c
    return func_inner

# 创建闭包实例
f = func_outer(1)
# 执行闭包
num1 = f(2)
num2 = f(3)
print(num1)
print(num2)

在这里,f就叫做闭包的实例,func_inner函数就叫做闭包
此时执行结果如下:
在这里插入图片描述
可以见得,f里封存了外部函数的变量1,当闭包实例建立出来,再实行闭包实例,此时相当于1+2和1+3,得到了如上结果。
使用debug可以查看到,执行完f = func_outer(1)代码后,此时一个函数对象已经保存在内存当中:
在这里插入图片描述
当一开始步入代码num1 = f(2)(实行闭包)后:
在这里插入图片描述
一个外部函数.内部函数的对象存储在了内存中,注意:在执行完f = func_outer(1)并没有立即产生这样一个对象,而是在调用时才会产生该对象
这时,再步入内部函数:
在这里插入图片描述
在这里插入图片描述
这样c=3便出现了,此时在打印c就会出现3,4的出现与3的原理一样

修改外部函数的变量

代码如下:

# 外部函数
def func_outer(a):
    # 内部函数
    def func_inner(b):
        nonlocal a
        a = 2
        c = a + b
        return c
    return func_inner

# 创建闭包实例
f = func_outer(1)
# 执行闭包
num1 = f(2)
num2 = f(3)
print(num1)
print(num2)

多了一行nonlocal a 这里的nonlocal关键字是声明我这里用的是外部的a,而不是自己新定义的局部变量a

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

graceful coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值