Discuss / Python / 为啥L=[0]就直接可以,n=0就还得加上一个nonlocal呢

为啥L=[0]就直接可以,n=0就还得加上一个nonlocal呢

Topic source

Superb来了

#1 Created at ... [Delete] [Delete and Lock User]

def createCounter(): L=[0] def counter(): L[0]=(L[0]+1) return L[0] return counter

晨小伍

#2 Created at ... [Delete] [Delete and Lock User]

闭包中内部函数要修改外部函数局部变量L,只有两个办法: 1、就是你代码中这样,把L变成一个容器,或者说把L变成可变对象,然后内部函数就可以修改了。 这里拓展一下:我们目前最熟悉的容器/可变对象就是list了;如果是单纯的n,它作为一个整体仍然是不可变的。这点可以回忆一下前面的内容,为什么tuple是不可变对象,但tuple里面的list元素的内容仍然可以改变? 2、第二个方法,就是在内部函数里给外部变量加一个nonlocal声明,指示内部函数去其他领域获取这个变量。


  • 1

Reply