Discuss / Python / 用生成器来练习

用生成器来练习

Topic source
def createCounter():
    def g():
        n = 0
        while True:
            n = n + 1
            yield n
    it = g()
    def counter():        
        return next(it)
    return counter

Matters_

#2 Created at ... [Delete] [Delete and Lock User]

学以致用,学习了!

畋恬天

#3 Created at ... [Delete] [Delete and Lock User]

受教

想请问一下 it = g() def counter():
return next(it) 换成 def counter(): return next(g()) 这样为什么就不行了呢

因为g()是从头开始调用一个生成器, 所以每次返回都是1, 而it = g(), 就可以对这个生成器进行迭代了, 也就是生成1,2,3,4,5

孝爱精进

#6 Created at ... [Delete] [Delete and Lock User]

@今天也是蓝色的 问题在于作用域~ it = g() return next(g()) it 这个迭代器的作用范围在counter的外面,延长了他的生存周期 如果写在里面比如next(g()) 就会每次都弹出都调用 等于都重置一份

def createCounter(): n = 0 def g(): nonlocal n while True: n = n + 1 yield n it=g() return next(it) 为什么这样每次执行出来都是1呢

@夏天很热_冬天很冷

因为你每次调用 createCounter 都会初始化 it

o( ̄▽ ̄)d点赞

会长-Aries

#10 Created at ... [Delete] [Delete and Lock User]

你们这么强,是认真的吗?


  • 1

Reply