2014-10-19 3 views
1

Есть ли способ возобновить итератор после сигнала прерывания клавиатуры или другого сигнала SIGINT в python?Резюме итератор

Специально для itertools итератора

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

Я хочу, чтобы возобновить печать, откуда он вышел от

+0

ваш код исчерпает итератор, так что это не совсем ясно. – wim

ответ

0

Вы можете поймать клавиатуры прерывания в попытке/за исключением блока

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

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-е слово, то все более значения (слова) будет получено и напечатано. Я полагаю, что я мог бы написать некоторые коды для хранения переменной счетчика в отдельном файле всякий раз, когда программа завершает работу, и всякий раз, когда программа перезагружается, она вытягивает последнюю переменную-счетчик из файла, чтобы возобновить вывод. надеюсь, что это сработает ..

Смежные вопросы