Python 保存itertools产品循环值,然后从上一个结果继续
我用这段代码来破解一个简单的密码mycubana,但我想“暂停”itertools循环,以便在一段时间后,我可以从上次保存的Python 保存itertools产品循环值,然后从上一个结果继续,python,cryptography,itertools,brute-force,Python,Cryptography,Itertools,Brute Force,我用这段代码来破解一个简单的密码mycubana,但我想“暂停”itertools循环,以便在一段时间后,我可以从上次保存的itertools.product值开始恢复循环。有没有什么方法可以在不改变大量代码的情况下做到这一点 代码: 是的,其实很简单。使用您的环境和bruteforce的定义,以下代码将在生成的序列上执行两次10个候选项的运行: bf26_8 = bruteforce(string.ascii_lowercase, 8, 9) count = 0 for c in bf26
itertools.product
值开始恢复循环。有没有什么方法可以在不改变大量代码的情况下做到这一点
代码:
是的,其实很简单。使用您的环境和
bruteforce
的定义,以下代码将在生成的序列上执行两次10个候选项的运行:
bf26_8 = bruteforce(string.ascii_lowercase, 8, 9)
count = 0
for c in bf26_8:
count += 1
print(c)
if count == 10:
break
print("======== PAUSED ========")
for c in bf26_8:
count += 1
print(c)
if count == 20:
break
“技巧”是将
bruteforce
的结果存储在变量中。该结果是一个,因此,如果您对其进行迭代,但不耗尽它(即,打破迭代循环),则一旦您再次开始迭代,它将为您提供continuations值。但我希望迭代一个长度为10的26个字符的列表,它将在完成之前耗尽内存,就像这篇帖子:我编辑了答案,告诉你不会发生爆炸。生成器(我在答案中添加了一个链接)并不预先创建整个结果序列,而是通过维护生成序列的代码和一些上下文(例如,程序指令指针和局部变量的值),支持序列生成的对象。
bf26_8 = bruteforce(string.ascii_lowercase, 8, 9)
count = 0
for c in bf26_8:
count += 1
print(c)
if count == 10:
break
print("======== PAUSED ========")
for c in bf26_8:
count += 1
print(c)
if count == 20:
break