2014-11-09 2 views
1

Я хотел был бы сохранить состояние itertools.product() после того как моя программа завершает работу. Можно ли это сделать с травлением? То, что я планирую сделать, это создать перестановки, и если процесс будет прерван (KeyboardInterrupt), я могу возобновить процесс при следующем запуске программы.Можно ли рассортировать itertools.product в python?

def trywith(itr): 
    try: 
     for word in itr: 
      time.sleep(1) 
      print("".join(word)) 
    except KeyboardInterrupt: 
     f=open("/root/pickle.dat","wb") 
     pickle.dump((itr),f) 
     f.close() 

if os.path.exists("/root/pickle.dat"): 
    f=open("/root/pickle.dat","rb") 
    itr=pickle.load(f) 
    trywith(itr) 
else: 
    try: 
     itr=itertools.product('abcd',repeat=3) 
     for word in itr: 
      time.sleep(1) 
      print("".join(word)) 
    except KeyboardInterrupt: 
     f=open("/root/pickle.dat","wb") 
     pickle.dump((itr),f) 
     f.close() 
+0

Посмотрите http://stackoverflow.com/q/9864809/3001761 – jonrsharpe

+0

Nice, но я искал более простое объяснение того, как это сделать, поскольку я все еще изучаю python. – repzero

+0

Короткий ответ - нет, вы не можете просто рассолить его; я не думаю, что нет гораздо более простого решения. – jonrsharpe

ответ

0

В Python 2, не существует рассол поддержка различных itertools.

Однако в Python 3, была добавлена ​​поддержка травление, поэтому itertools.product() итератор должен протравить просто отлично:

>>> import pickle 
>>> import itertools 
>>> it = itertools.product(range(2), repeat=3) 
>>> next(it) 
(0, 0, 0) 
>>> next(it) 
(0, 0, 1) 
>>> next(it) 
(0, 1, 0) 
>>> p = pickle.dumps(it) 
>>> del it 
>>> it = pickle.loads(p) 
>>> next(it) 
(0, 1, 1) 
>>> next(it) 
(1, 0, 0) 
>>> next(it) 
(1, 0, 1) 
>>> next(it) 
(1, 1, 0) 
Смежные вопросы