生成器函数不更新局部变量
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
以始终获取第一个元素。
我正在处理一个从朋友那里得到的问题,在这个问题中我需要按以下格式生成时间: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
以始终获取第一个元素。