闭包

闭包作用

其外部作用域已经释放的情况下,内部方法或相应属性贮存在内存中,从而用于函数封装,或减少函数参数问题

闭包例子

与nonlocal的协同使用

a = 0
print('1',(id(a)))
def func1():
    a = 1
    print('2', id(a))
    def func2():

        nonlocal a # 当后续无需修改a变量时,闭包函数会直接处理相关的变量引用,但若需要修改变量时,需要显示申明变量为nonlocal。因为闭包处理时仅保留变量的引用,不可修改。
        print(id(a))
        # global a
        a = 2
        print('closure a: ',a)
    print(f'func1_a: {a}')
    func2()
    print(f'after func2, func1_a: {a}')

func1()

1 2571046971664
2 2571046971696
func1_a: 1
2571046971696
closure a:  1
after func2, func1_a: 1

你可能感兴趣的:(闭包)