与仅计算计算相比,为什么打印计算答案要慢得多?

时间:2013-10-19 19:06:14

标签: python

我正在计算一些非常大的分区问题的答案,并想知道为什么b = a / c(其中a和c以及两个正整数)必须比你输入问题时要更快找出问题并且要求打印答案:b = a / c比b = a / c然后打印b更快。

很慢:

from datetime import datetime - startTime = datetime.now()
a=2**1000000-3
b=a/13
print b
print(datetime.now()-startTime) 

但没有print b,它非常快。我后来输入了c=a%13以查看是否有任何实际发生的事情(我对编程仍然很陌生)而且当我输入print c(没有print b代码时)它非常快。

3 个答案:

答案 0 :(得分:2)

你正在尝试输出相当大的数字(大约10 ^ 300000) - 从二进制转换为十进制格式需要时间(我想这需要做大约300000个分区,内部数字以二进制格式存储) 。如果你真的需要以十进制格式输出整数 - 我认为你不能加速它。但您可以快速打印十六进制或二进制格式的数字:

hex(b)
bin(b)

您可以使用Decimal类型在内部以十进制格式存储数字,但使用此类型的计算可能会慢得多。

答案 1 :(得分:2)

据我所知,IO操作很慢,打印到屏幕就像写入文件一样,它会阻塞线程一段时间。

正如有人指出的那样,从数字到字符串的转换也可能需要时间。每当我必须测量某些东西的时间。我测量计算的时间并在测量时间后打印任何类型的结果。

为了使程序更快,但内存耗尽,您可以将每个结果保存在列表中,然后编译一个大字符串并仅打印一次。

重复打印打印比打印一次大打印需要更多时间。

from datetime import datetime

startTime = datetime.now()

a=2**1000000-3
b=a/13

elapsedTime = datetime.now() - startTime

print "Elapsed time %s\n Number: %s" % (elapsedTime, b)

答案 2 :(得分:0)

人们已经指出,IO很慢。在执行IO时,您不知道您的进程将如何进行调度 - 它可能会被置于等待队列中。我不确定你的时间是什么,但简单的工程逻辑将要求你将IO作为整个运行时间的一小部分(即无关紧要)。所以我建议你做1 * 10 ^ 6个分区(越多越好),然后做IO,假设你只测试数学。请注意,您涉及计算机和操作系统在计算中的工作方式。