恢复迭代器
有没有办法在Python中,在按下键盘中断信号或者其他SIGINT信号后,继续一个迭代器的操作呢?
这里特别是指itertools这个迭代器。
import itertools
for word in itertools.product("abcd", repeat=3):
print(word)
我想要从上次停止的地方继续打印。
2 个回答
0
在阅读了一些关于生成器和'yield'语句的内容后,我意识到生成器只会输出一个值,然后丢弃这个值,再输出下一个值,依此类推……我在尝试找到一种方法,让这个函数在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个单词,就会输出所有其他的值(单词)并打印出来。我想我可以写一些代码,在程序退出时把计数器的值存储到一个单独的文件里,然后在程序重新启动时从这个文件中读取最后的计数器值,这样输出就能继续了。希望这样能奏效……
0
你可以在一个尝试/异常的代码块中捕捉到键盘中断
import itertools
import time
for word in itertools.product("abcd",repeat=3):
try:
print(word)
time.sleep(1)
except:
pass
在执行过程中按下 Ctrl+C 并不会停止循环