最近学习python的返回函数,遇到了一个问题。此练习题目为:
利用闭包返回一个计数器函数,每次调用它返回递增整数:
我所作的答案为:
def createCounter():
li = [0]
def counter():
li[0] += 1
return li[0]
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('测试失败!')
得到的结果为:
1 2 3 4 5
测试通过!
本来已经得出结论,但是我试着将createCounter()中的返回值从li[0]改为li,即:
def createCounter():
li = [0]
def counter():
li[0] += 1
return li
return counter
最终的结果变为:
[5] [5] [5] [5] [5]
测试失败!
我向询问一下,为什么将函数返回值从一个数字改为一个列表以后,得到的结果为什么不是[1] [2] [3] [4] [5]