生成器函数不更新局部变量

Generator function not updating a local variable

我正在处理一个从朋友那里得到的问题,在这个问题中我需要按以下格式生成时间:00:00:00、00:00:01、00:00:02等等......但是为了正确地遵循这个问题的说明,我需要使用生成器函数来完成那个结果。 因此,首先我需要创建三个生成器函数,它们为秒和分钟生成 0-59 之间的数字,为小时生成 0-23 之间的数字。 所以我尝试这样做,我认为我做的一切都是正确的,但我遇到了一个问题,假设我们正在谈论现在产生小时数的 gen_func(我将其称为 gen_hr ), 当我尝试使用它工作的 yield 命令时,但它只在屏幕上打印数字 0 这应该只是我真正想要的东西的开始,我正在尝试更新局部变量(它是 gen_hr 生成器函数的局部变量),但它没有更新,每次我尝试打印下一个生成的值时,它都会打印 0代码如下:

def gen_hours():
    hr = 0

    while hr < 24:
        if hr < 10:
            yield f"0{hr}"
            hr += 1
        else:
            yield hr
            hr += 1

这是输出:

for i in range(10):
    print(next(gen_hours()))

>>> 00
>>> 00
>>> 00
>>> 00
>>> 00
>>> 00
>>> 00
>>> 00
>>> 00
>>> 00

这是我期望的输出:

>>> 01
>>> 02
>>> 03
>>> 04
>>> 05
>>> 06
>>> 07
>>> 08
>>> 09
>>> 10

如果你能帮助我理解我的代码有什么问题,那就太好了。

您应该先创建一个生成器,然后在其上调用 next

gen = gen_hours()
for i in range(10):
    print(next(gen))

另一种使用 islice 实现的方法是:

from itertools import islice

for h in islice(gen_hours(), 10):
    print(h)

您的代码在循环的每次迭代中创建一个新生成器并调用 next 以始终获取第一个元素。