两段代码如下,求教为什么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('测试失败!')
你试一下这个。
数值是常量,而list这种数据结构,变量保存的是引用地址。和变量作用域以及变量的数据类型也有关。
不知道你为什么要这么用,可以去了解一下“闭包”、“变量作用域”等相关知识。