【发布时间】:2019-02-20 14:58:39
【问题描述】:
在循环中使用print 会减慢循环速度。打印一些东西(我试过Hello!) 100 次需要大约 2 秒,没有它,需要 0.0 秒。我使用模块time 准确地记录了时间。这是一个在其中打印并显示最后花费的时间的循环:
import time
t = time.time()
for _ in range(100):
print("Hello! ",end = "")
print("\n",time.time()-t)
输出:
Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! 1.9912450313568115
这是另一个循环,它只是将字符串添加到变量中,需要 0.0 秒。
import time
t = time.time()
output = ""
for _ in range(100):
output += "Hello! "
print(time.time()-t)
输出:
0.0
我尝试添加更多操作,但它仍然需要0.0 秒。示例:
import time
t = time.time()
output,num,count,abc = "",0,30,"H"
for _ in range(100):
output += "Hello! "
num += 10000
count += 10000000
abc += "Hello Guys!"
print(time.time()-t)
为什么print 会减慢循环速度,我该如何解决这个问题?
【问题讨论】:
-
你不能。 IO 很慢。您可以将所有输出存储在一个列表中,并在最后
print(*myOutputs, sep="\n")它们 - 这将减少循环将字符串插入到列表中所花费的时间。仍然需要一些时间,但稍微少一点 - 除非您在存储所有输出时遇到内存问题。简洁的岩石;) -
也用于性能测试,我会使用类似 timeit:docs.python.org/3/library/timeit.html 的东西 - 它将执行代码 10000 次并在测量事物时平均异常值。
-
答案是不要将
print()放在一个循环中。通常无论如何它是没有意义的,只是一个压倒性的流。如果您想监控进度,请使用if loop_count % 1000 == 0: print(something) -
还有 2:不要添加到字符串中,它们是不可变的——你一直在重建新的字符串。使用列表来存储字符串部分和
''.join(parts)以后。 -
这就是我建议模数的原因
标签: python python-3.x time