所有自然数的惯用列表

Idiomatic list of all natural numbers

我正在尝试创建一个生成器,它将 return 自然数按顺序排列。这用于枚举另一个将在 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: 似乎不符合 Python 规范。

是否有标准库函数来迭代自然数?

要回答您的字面问题,请使用 itertools.count()。它将从 start 值开始增加 step,直到无穷大。

话虽如此,看来你真正想做的是:

for idx, item in enumerate(my_generator):
    q.put((idx, item))

您有几个简单的选择。

使用大号 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)