题目:利用闭包返回一个计数器函数,每次调用它返回递增整数:
def createCounter():
f = [0]
print('闭包外--')
def counter():
print('闭包内--')
f[0] = f[0] + 1
return f[0]
return counter
# 测试
counterA = createCounter()
print(counterA(), counterA(), counterA(), counterA(), counterA())
输出:闭包外-- 闭包内-- 闭包内-- 闭包内-- 闭包内-- 闭包内-- 1 2 3 4 5
建议新手这样跑一下,即可知道2个结论:1)同一个返回函数对象,重复执行的时候,仅跑函数内的内容。返回函数外的内容是跑1次2)假如是这么写:
def counter():
print('闭包中--')
f[0] = f[0] + 1
return f
print是等内容全部执行完,再输出的。
很简单就可以测试:print(2, 3, 1/0)
,并不会输出2和3。(没找底层代码,就这么反推出结论不会被打脸吧。。)那么当都运算完毕,f变量已经存了最后一个值。
反过来假设是f[0]
,这个不是可变量。