[初学] Python 中嵌套函数声明global的问题

两段代码如下,求教为什么L作为list时候可以正常使用,L作为int的时候就要内外都声明global才能行呢?

def createCounter():
    L = []
    def counter():
        L.append('')
        return len(L) 
    return counter
    
counterA = createCounter()
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
counterB = createCounter()
if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
    print('测试通过!')
else:
    print('测试失败!')
def createCounter():
    global L
    L = 0
    def counter():
        global L
        L = L +1
        return L
    return counter

counterA = createCounter()
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
counterB = createCounter()
if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
    print('测试通过!')
else:
    print('测试失败!')
    
阅读 3.2k
1 个回答
def createCounter():
    L = 0
    def counter():
        B = L +1
        return B
    return counter
c = createCounter()
print([c(),c(),c()])

你试一下这个。
数值是常量,而list这种数据结构,变量保存的是引用地址。和变量作用域以及变量的数据类型也有关。

def createCounter():
    L = 0
    def counter():
        nonlocal L
        L += 1
        return L
    return counter
c = createCounter()
print([c(),c(),c()])

不知道你为什么要这么用,可以去了解一下“闭包”、“变量作用域”等相关知识。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进