恢复迭代器

时间:2014-10-19 11:37:52

标签: python iterator

有没有办法在python中的键盘中断信号或其他SIGINT信号后恢复迭代器?

特别适用于itertools迭代器

import itertools for word in itertools.product("abcd",repeat=3): print(word)

我想从中断的地方恢复打印

2 个答案:

答案 0 :(得分:0)

您可以在try / except块中捕获键盘中断

import itertools
import time
for word in itertools.product("abcd",repeat=3):
  try:
    print(word)
    time.sleep(1)
  except:
    pass  

在执行期间按Ctrl + C不会停止迭代

答案 1 :(得分:0)

在对发电机进行了一点阅读之后,'产量' statement.i已经意识到生成器只输出一个值,丢弃它并输出另一个值等等......我试图在python退出后找到一种方法来恢复以下函数的输出

counter=0
def product(*args, repeat=1):
    global counter
    pools = [tuple(pool) for pool in args] * repeat
    #yield pools
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        counter=counter+1
        if counter>11:
            yield tuple(prod)

def product_function():
    for i in product('abc',repeat=3):
        print(i)
        print(counter)

product_function()

我最终决定放入一个名为counter的小变量,一旦计数器大于第11个单词,那么所有的值(单词)都会被生成并打印出来。我想我可以编写一些代码,以便在程序退出时将计数器变量存储在一个单独的文件中,每当程序重新启动时,它会从文件中提取最后一个计数器变量,以便输出恢复。希望这有效..