函数在使用yield迭代时返回结果不一样

求解答 迭代器问题
函数在使用迭代时返回结果不一样


# -*- coding:utf8 -*-
year = 0


def ri_qi():
    global year

    while True:
        for month in range(1, 13):
            for day in range(1, 31):
                yield year, month, day
        year += 1


for i in range(5):
    print(next(ri_qi()))

返回结果入下,发现没有迭代走

E:\python文件3.8\venv\Scripts\python.exe E:/python文件3.8/日期变化.py
(0, 1, 1)
(0, 1, 1)
(0, 1, 1)
(0, 1, 1)
(0, 1, 1)

换成如下代码

# -*- coding:utf8 -*-
year = 0


def ri_qi():
    global year

    while True:
        for month in range(1, 13):
            for day in range(1, 31):
                yield year, month, day
        year += 1


a = ri_qi()
for i in range(5):
    print(next(a))

运行结果如下

E:\python文件3.8\venv\Scripts\python.exe E:/python文件3.8/日期变化.py
(0, 1, 1)
(0, 1, 2)
(0, 1, 3)
(0, 1, 4)
(0, 1, 5)

感觉代码应该没有区别,问什么结果不一样。求解答。

a = ri_qi()是把一个生成器叫做a
然后每次对这个a调用next()
但是如果你直接next(ri_qi())就是每次生成一个新的生成器那自然每次输出的都是初始值