Python 打印计算比执行计算需要更多时间

标签 python performance variables numerical-computing

我用 python 写了一个脚本,这让我很惊讶。 基本上,它需要五个 20 位数字,将它们相乘,然后将它们提高到 3000 次方。timeit 模块用于查找计算所需的时间。嗯,当我运行这个脚本时,它说计算它需要 3*10^-7 秒。 然后它生成一个文件 output.txt,但脚本直到大约 15 秒后才结束。

import timeit
outputFile = open("output.txt", "w")
start = timeit.default_timer()
x = (87459837581209463928*23745987364728194857*27385647593847564738*10293769154925693856*12345678901234567891)**3000
stop = timeit.default_timer()
time = stop-start
print "Time taken for the calculation was {} seconds".format(time)
outputFile.writelines(str(x))
outputFile.close()
y = raw_input("Press enter to exit.")

这是否意味着打印一个 280kb 的文件实际上比执行计算需要更长的时间?(我觉得不太可能。)

如果不是这样,那么python会在调用变量x时执行计算吗?它会在每次计算变量时执行计算,还是将实际值存储在变量中?

我刚刚写了另一个脚本,它确认将结果写入 .txt 文件需要 python 0.03 秒。那么,为什么python要在后面执行计算呢?

最佳答案

问题不在于计算,也不在于写入文件:将结果从其内部二进制表示形式转换为以 10 为底的表示形式消耗了大量时间。这需要的时间是位数的二次方,而且这里有很多位。

如果您将输出行替换为:

outputFile.writelines(hex(x))

您会发现它运行得更快。转换为十六进制表示只需要与位数成线性关系的时间。

如果您确实需要以 10 进制表示形式输出大整数,请考虑使用 decimal 模块。这在内部以与基数 10 相关的表示形式进行计算,然后转换为十进制字符串所花费的时间与十进制位数成线性关系。不过,您需要提前将小数上下文的精度设置为“足够大”的值,以避免舍入时丢失低位数字。

关于Python 打印计算比执行计算需要更多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22747512/

相关文章:

python - Django:模拟模型上的字段

java - 来自其他类的变量在 JFrame 中没有获取值

python - 测试同一性与测试是否在元组中不同吗?

python - python线程可以访问命名空间中的变量吗?

c++ - 氧气,太重而无法维持?

linux - 稍微准确地测量 cpu 使用情况的最低时间分辨率是多少?

Python 提高函数速度

javascript - 是否可以使用变量来突出显示 jQuery 中的一行?

variables - 默认情况下是否可以训练局部变量?

python - 避免在调用 Django 管理命令时触及空日志文件