【发布时间】:2016-08-19 04:19:40
【问题描述】:
我目前有一个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:
也许是我的错,没有说清楚。我想看看是否可以每隔一段时间检查一个值,而不是每次都检查一次。例如,我不希望我的代码在 1 时检查 'printcounter' 是否等于 1000000000,这太荒谬了。我知道机器运行得快得离谱,所以没关系,但我很好奇是否有可能减少以这种方式检查的次数,而不是拥有一个让自己马虎或懒惰的愚蠢代码只是因为它足够快来纠正它。
【问题讨论】:
-
if声明不是您的麻烦的原因。您可以通过profiling your Python code 亲自查看此内容,这样您就知道程序的哪些部分真正花费了最多时间。 -
你真的要打印这10,000,000个中间进度报告吗? O_o
-
@Reblochon Masque 它不会打印所有内容,只是每 10000 次迭代它都会给我一个状态检查。
-
是的,
10,000,000 = 100,000,000,000 / 10,000,这就是我问的原因!照原样,您的设置将打印 1000 万条“状态检查”行! -
@Reblochon Masque 嗯...哎呀。这不是我的主要程序,我是在一个单独的环境中开发的,我没有想太多就设置了数字,但那是一个令人印象深刻的地方,这可能是在不同情况下速度变慢的原因,我'现在就换个问题。
标签: python performance python-3.x variables for-loop