python闭包

闭包
概念:函数嵌套的前提下,内层函数引用了外层函数的变量(包括参数),外层函数, 又把 内层函数 当做返回值进行返回,这个内层函数+所引用的外层变量, 称为 "闭包"

应用场景,外层函数, 根据不同的参数, 来生成不同作用功能的函数

注意事项

  1. 闭包中, 如果要修改引用的外层变量,需要使用 nonlocal 变量 声明,否则当做是闭包内, 新定义的变量
  2. 当闭包内, 引用了一个, 后期会发生变化的变量时, 一定要注意,函数, 是被调用时, 才去确定变量标识所对应的值

示例:

def test():
    func = []
    for i in range(1, 4):
        def test2():
            print(i)
        func.append(test2)
    return func

newFunc = test()
print(newFunc)
newFunc[0]()
newFunc[1]()
newFunc[2]()

# 结果
[<function test.<locals>.test2 at 0x0000024BF15CD798>, <function test.<locals>.test2 at 0x0000024BF1719A68>, <function test.<locals>.test2 at 0x0000024BF16F5708>]
3
3
3

def test():
    func = []
    for i in range(1, 4):
        def test2(num):
            def inner():
                print(num)
            return inner
        func.append(test2(i))
    return func

newFunc = test()
print(newFunc)
newFunc[0]()
newFunc[1]()
newFunc[2]()

#结果
[<function test.<locals>.test2.<locals>.inner at 0x000001C99E825708>, <function test.<locals>.test2.<locals>.inner at 0x000001C99E949A68>, <function test.<locals>.test2.<locals>.inner at 0x000001C99E825798>]
1
2
3
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容