gpt4 book ai didi

python - 不要每次迭代都检查变量

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:29 25 4
gpt4 key购买 nike

我目前有一个for-loop,它会经过无数次迭代来检查某些东西,当它进入新的迭代时,我需要它来检查一个变量是否我有与当前迭代相同的大小。
这是我正在做的示例代码:

import datetime
now = datetime.datetime.now()
printcounter = 0
for i in range(3,100000000000+1,2):
if (printcounter == 1000000000):
print(i,"at %d" %now.hour, "hours and %d" % now.minute, "minutes.")
printcounter = 0
else:
#Do operation
printcounter += 1

但是,由于在我得到答案之前它可能经历了数百万次繁重的数学运算,我注意到通过剥离“printcounter”变量的这段代码而不给我进度报告让我得到了显着的加速,整整​​几分钟有时。

有没有办法只检查“printercounter”变量是否等于 10000,而不是让它检查每一次迭代?
无论如何,我个人无法想到不求助于嵌套 for 循环,这可能会变得很脏,我宁愿没有。

顺便说一下,我使用的是 Windows 8.1、Python 3.5.1,如果这有什么不同的话。

编辑:
我知道打印需要花费大量时间,但是,如果我改为打印到文件;我的硬盘非常很快,然后我仍然得到相同的时间差异,尽管减少了时间差异。另外,我一直想在很多其他脚本中实现这个问题的解决方案,所以即使这不是这里的主要问题,我仍然想知道如何去做。

编辑 2:
可能是我没说清楚的错。我想看看是否有可能每隔一段时间检查一次值,而不是每次都检查一次。例如,我不希望我的代码在“printcounter”为 1 时检查它是否等于 1000000000,这很荒谬。我知道机器运行得快得离谱,所以没关系,但我很好奇是否有可能减少它以这种方式检查的次数,而不是有一个允许自己草率或懒惰的愚蠢代码只是因为它的纠正速度足够快。

最佳答案

如果你不想每次迭代都检查变量,让它变得不必要......
通过做这样的事情来代替:

import datetime

iterations = 100000000000
subiterations = 10000
chunks, remaining = divmod(iterations, subiterations)

now = datetime.datetime.now()
printcounter = 0
for i in range(chunks):
for j in range(subiterations):
#Do operation
pass

printcounter += subiterations
print('{:,d} at {} hours {} minutes'.format(printcounter, now.hour, now.minute))

if remaining:
for j in range(remaining):
#Do operation
pass

printcounter += remaining
print('{:,d} at {} hours {} minutes'.format(printcounter, now.hour, now.minute))

关于python - 不要每次迭代都检查变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com