0

指定された無限シーケンスを出力するジェネレーターを作成しようとしています。現在、次のコードがあります。

def numGen():
for i in range(1,13):
    yield i

それから私に与えます:

>>> y = numGen()
>>> y
<generator object numGen at 0x7f6b88d22570>
>>> y.__next__()
1
...
>>> y.__next__()
12
>>> y.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module> StopIteration

リセットしてから1、2、3、...、11、12、1、2、3、...を出力するために何を変更する必要があるのか​​ わかりません...追加しようとしました収量行の後に行 "i += 1" がありますが、それは私が望むものではない 14 を出力します。

4

3 に答える 3

4

示されているジェネレーターの中心的な問題は、シーケンスを 1 回だけループし、その後停止することです。簡単な変更は、アウターwhile Trueでラップすることです。たとえば、次のようになります。

def numGenForever():
    while True:
        for i in range(1,13):
           yield i

これは、前の完了ごとにシーケンスの反復を再開するため、「無限」になります。

于 2015-12-09T03:13:46.413 に答える
3

循環させるだけです。

y = itertools.cycle(numGen())
于 2015-12-09T03:05:11.623 に答える
3

Python 3.3 以降を使用している場合はyield from、 iterable から連続する要素を生成する を使用できます。次に、それを無限ループに入れることができます-そのままでは、関数には無限のものはありません。

def numGen():
    while 1:
        yield from range(1,13)

1 から 12 までの数字の生成が完了すると、ループはシーケンスを最初からやり直します。

于 2015-12-09T03:13:38.097 に答える