屈服,直到产生所有需要的值,是否有办法使切片变得懒惰

Ton*_*nen 3 python generator variable-assignment slice lazy-sequences

当发电机没有完成值并且已经读取了所有需要的结果时,有没有办法停止屈服?我的意思是生成器在没有做StopIteration的情况下提供值.

例如,这永远不会停止:(已修订)

from random import randint
def devtrue():
    while True:
        yield True

answers=[False for _ in range(randint(100,100000))]
answers[::randint(3,19)]=devtrue()
print answers
Run Code Online (Sandbox Code Playgroud)

我找到了这段代码,但还不明白,在这种情况下如何应用它:http: //code.activestate.com/recipes/576585-lazy-recursive-generator-function/

Fer*_*yer 8

您可以调用close()生成器对象.这样,GeneratorExit在生成器中引发异常,并且对其next()方法的进一步调用将引发StopIteration:

>>> def test():
...     while True:
...         yield True
... 
>>> gen = test()
>>> gen
<generator object test at ...>
>>> gen.next()
True
>>> gen.close()
>>> gen.next()
Traceback (most recent call last):
  ...
StopIteration
Run Code Online (Sandbox Code Playgroud)