利用闭包返回一个计数器函数,每次调用它返回递增整数:

xiaoxiao2025-08-22  88

#方案1 def createCounter(): def f(): x = 0 while True: x += 1 yield x it = f() def number(): return next(it) return number createA = createCounter() print(createA()) #方案2 def createCounter(): f = [0] #f=0不行,这是因为在执行代码 createA = createCounter()时,python会导入全部的闭包函数体increase()来分析其的局部变量,python规则指定所有在赋值语句左面的变量都是局部变量,则在闭包increase(()中,变量a在赋值符号"="的左面,被python认为是increase(()中的局部变量。再接下来执行print createA()时,程序运行至f = f + 1时,因为先前已经把f归为increase()中的局部变量,所以python会在increase()中去找在赋值语句右面的f的值,结果找不到,就会报错。只要将f设定为一个容器就可以了。这样使用起来多少有点不爽,所以在python3以后,在f= f + 1 之前,使用语句nonloacal f就可以了,该语句显式的指定a不是闭包的局部变量。 def increase(): f[0] = f[0] + 1 return f[0] return increase createA = createCounter() print(createA()) print(createA()) print(createA())
转载请注明原文地址: https://www.6miu.com/read-5035141.html

最新回复(0)