我正在尝试创建一个生成器,它将按顺序返回自然数。这用于枚举另一个将在StopIteration
上退出的生成器,这似乎是最简单的方法。但是,我找不到创建这个生成器的惯用方法:
def numbers():
i = 0
while True:
yield i
i += 1
q = Queue.Queue()
for i in numbers():
try:
q.put((i, my_generator.next()))
except StopIteration:
break
这确实有效,但以这种方式使用while True:
似乎是单声道的。
是否有标准库函数来迭代自然数?
答案 0 :(得分:3)
要回答您的文字问题,请使用itertools.count()
。它会从start
值step
计算到无穷大。
那就是说,你真正想做的就是:
for idx, item in enumerate(my_generator):
q.put((idx, item))
答案 1 :(得分:0)
你有几个简单的选择。
使用较大的range()
:
q = Queue.Queue()
for i in range(10**10):
try:
q.put((i, my_generator.next()))
except StopIteration:
break
或者只是enumerate()
您真正感兴趣的生成器:
q = Queue.Queue()
for item in enumerate(my_generator):
q.put(item)