利用闭包返回一个计数器函数,每次调用它返回递增整数
# 方法一 s = 0 #设置全局变量 def createCounter(): def counter(): # 加上global,同时无论在那里修改,都会全局影响 global s #引用全局变量 s = s+1 return s return counter # 测试: counterB = createCounter() if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]: print('测试通过!') else: print('测试失败!')
# 方法二 def createCounter(): s = [0] # 当成列表,只更改列表的值 def counter(): s[0] = s[0]+1 return s[0] return counter # 错误代码 def createCounter(): s = 0 def counter(): s += 1 # s被当成counter的局部变量,并且认为createCounter的s变量没有定义 return s return counter # 错误信息 # UnboundLocalError: local variable 's' referenced before assignment ---> s未被定义