我如何在生成器中格式化字符串?
How do i format strings in a generator?
我想格式化生成器中的一些值。当我尝试这样做时,出现错误:
TypeError: unsupported format string passed to generator.__format__
我尝试了不同类型的字符串格式,但没有任何效果。
这是我的代码:
def gen_secs():
for i in range (60):
yield i
def gen_minutes():
for i in range (60):
yield i
def gen_hours():
for i in range (24):
yield i
def gen_time(hours,minutes,seconds):
yield (f'{hours:02}:{minutes:02}:{seconds:02}')
seconds = gen_secs()
minutes = gen_minutes()
hours = gen_hours()
gt = gen_time(hours,minutes,seconds)
while True:
print(next(gt))
我想找回一天中所有不同的时间组合。
00:00:00
00:00:01
00:00:02
00:00:03
00:00:04
00:00:05
00:00:06
等等...
你这里有一些问题。
一个是你的主生成器gen_time
最多产生一次,排除所有其他问题,你只会得到一次。
您将生成器对象作为参数传递给您的 gen_time
。然后你在生成器对象本身而不是它们的元素上格式化字符串,因此你的错误。
你在生成器上使用了一个 while True
循环,它会抛出一个 StopIteration
并中断你的程序。我不确定那是你想要的。
为了解决这个问题,考虑到计数点 (1),您需要某种循环将 yield
包裹在主生成器中。因此,您可以更改主生成器 gen_time
以在其他生成器上循环。像这样:
def gen_time():
for hours in gen_hours():
for minutes in gen_minutes():
for seconds in gen_secs():
yield (f'{hours:02}:{minutes:02}:{seconds:02}')
您还可以使用 yield from
结构编写更紧凑的代码:
def gen_time():
yield from (f'{hours:02}:{minutes:02}:{seconds:02}' for hours in gen_hours() for minutes in gen_minutes() for seconds in gen_secs())
现在考虑第 (3) 点,您可以将主要代码更改为:
for gt in gen_time():
print(gt)
我想格式化生成器中的一些值。当我尝试这样做时,出现错误:
TypeError: unsupported format string passed to generator.__format__
我尝试了不同类型的字符串格式,但没有任何效果。
这是我的代码:
def gen_secs():
for i in range (60):
yield i
def gen_minutes():
for i in range (60):
yield i
def gen_hours():
for i in range (24):
yield i
def gen_time(hours,minutes,seconds):
yield (f'{hours:02}:{minutes:02}:{seconds:02}')
seconds = gen_secs()
minutes = gen_minutes()
hours = gen_hours()
gt = gen_time(hours,minutes,seconds)
while True:
print(next(gt))
我想找回一天中所有不同的时间组合。
00:00:00
00:00:01
00:00:02
00:00:03
00:00:04
00:00:05
00:00:06
等等...
你这里有一些问题。
一个是你的主生成器
gen_time
最多产生一次,排除所有其他问题,你只会得到一次。您将生成器对象作为参数传递给您的
gen_time
。然后你在生成器对象本身而不是它们的元素上格式化字符串,因此你的错误。你在生成器上使用了一个
while True
循环,它会抛出一个StopIteration
并中断你的程序。我不确定那是你想要的。
为了解决这个问题,考虑到计数点 (1),您需要某种循环将 yield
包裹在主生成器中。因此,您可以更改主生成器 gen_time
以在其他生成器上循环。像这样:
def gen_time():
for hours in gen_hours():
for minutes in gen_minutes():
for seconds in gen_secs():
yield (f'{hours:02}:{minutes:02}:{seconds:02}')
您还可以使用 yield from
结构编写更紧凑的代码:
def gen_time():
yield from (f'{hours:02}:{minutes:02}:{seconds:02}' for hours in gen_hours() for minutes in gen_minutes() for seconds in gen_secs())
现在考虑第 (3) 点,您可以将主要代码更改为:
for gt in gen_time():
print(gt)