为什么生成器这种情况下函数不可以迭代?

def gensquares(r):
    for i in range(r):
        yield i
a = gensquares(5)
print(next(gensquares(5)))
print(next(a))
print(next(gensquares(5)))
print(next(a))
print(next(gensquares(5)))
print(next(a))
print(next(gensquares(5)))
print(next(a))

为什么 next(gensquares(5) 不进行迭代?

gensquares(5) 代表你重新初始化了一个生成器,所以每次都是从第一个迭代。a的话是代表了一个生成器,所以每次next都会迭代

等价于这个写法

def gensquares(r):
    for i in range(r):
        yield i
a = gensquares(5)
b = gensquares(5)
print(next(b))
print(next(a))
b = gensquares(5)
print(next(b))
print(next(a))
b = gensquares(5)
print(next(b))
print(next(a))
b = gensquares(5)
print(next(b))
print(next(a))