F2:python 闭包

本文详细探讨了闭包在编程中的作用,如何通过嵌套函数实现数据保护,并揭示了装饰器背后的原理。通过实例展示如何判断函数是否为闭包,以及分析自由变量。涉及的关键概念包括可变数据、不可变数据和外层函数变量的自由变量特性。
摘要由CSDN通过智能技术生成

一、闭包的作用

  • 保证数据安全
  • 装饰器的本质

二、闭包的产生

  • 嵌套函数
  • 内层函数调用外层函数的非全局变量

这个过程中这些外层函数非全局变量将成为自由变量(不受其他任何函数的调用)

# 代码
def outer(a, b):
    lst = []
    count = 0

    def inner(x):
        lst.append(x)
        nonlocal count
        count += 1
        print(a, b)
        return sum(lst) / len(lst), count

    return inner


ret = outer(1, 2)
print(ret(1))
print(ret(2))
print(ret(3))

# 输出
1 2
(1.0, 1)
1 2
(1.5, 2)
1 2
(2.0, 3)

outer() 中的可变数据lst、不可变数据count、位置参数a/b,都属于外层函数的非全局变量

三、判断函数是否为闭包函数——打印函数的自由变量

# 代码接上
print(ret.__code__.co_freevars)
# 输出
('a', 'b', 'count', 'lst')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值