首页 > 技术文章 > 利用闭包返回一个计数器函数,每次调用它返回递增整数

majw 2018-01-08 11:58 原文

def createCounter():
    def f():
        n=0
        while True:
            n=n+1
            yield n
    sun = f()
    def counter():
        return next(sun)
    return counter

 

创造生成器的方法里,为啥不能直接去调用f()呢,为什么要定义sun = f()

createCounter 返回的是 counter 这个函数,而此时 f() 并没有执行并返回一个生成器对象。所以每次 createCounter() 都会得到一个 counter 函数,而执行 counter(),都会执行 f() 而生成一个新的生成器对象

变向的理解,s1 = f(), s2 = f(),但是s1 == s2 是false

推荐阅读