2014-10-19 102 views
1

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

专门为itertools迭代器

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

我希望继续从它离开的地方

+0

你的代码将耗尽迭代器,所以它不清楚这个问题.. – wim 2014-10-22 12:50:51

回答

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不会停止迭代

+0

我正在考虑停止python程序和每当我重新启动它..迭代器从它停止的地方恢复...可能? – repzero 2014-10-22 21:32:36

0

经过对发电机和'yield'声明的读数之后,我发现发电机只输出一个值,放弃它并输出另一个值,等等......我试图找到一种方法来恢复输出下面的函数蟒蛇退出

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() 

我终于决定把在一个小变量称为柜台后,一旦计数器的值的第11个字,然后遍布值(字)产生并打印。我想我可以编写一些代码将计数器变量存储在一个单独的文件中,只要程序退出并且程序重新启动时它会从文件中提取最后一个计数器变量,以便恢复输出。希望这个工程..