Python打印计算比执行i

2024-10-05 11:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了一个脚本,这让我很惊讶。 基本上,它需要五个20位数的数字,乘以它们,然后把它们提高到3000的幂次。timeit模块用于查找计算所需的时间。当我运行这个脚本时,它说需要3*10^-7秒来计算它。 然后生成一个文件,输出.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时执行计算?它是在每次计算变量时执行计算,还是将实际值存储在变量中?在

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


Tags: 模块文件txt脚本defaulttime时间数字
3条回答

转换为字符串需要很长时间:

In [68]: %time x = (87459837581209463928*23745987364728194857*27385647593847564738*10293769154925693856*12345678901234567891)**3000
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 0.00 s

In [69]: %time xs = str(x)
CPU times: user 1.98 s, sys: 0.00 s, total: 1.98 s
Wall time: 1.98 s

In [71]: %time print xs
CPU times: user 0.01 s, sys: 0.00 s, total: 0.01 s
Wall time: 0.04 s

但对于拥有数十万位数字的数字来说,这并不奇怪。在

编辑

与其他答案相反,写入文件不需要太多时间:

^{pr2}$

除其他答案外,请使用outputFile.write(str(x))代替writelines。writelines用于字符串序列。在您的例子中,它迭代字符串并分别写入每个字符。在一个简单的测试中,writelines慢了3.7倍:

>>> timeit("f.writelines(str(s))", setup="f=open('tmp.txt','w');s=range(1000)", number=10000)
4.935087700632465
>>> timeit("f.write(str(s))", setup="f=open('tmp.txt','w');s=range(1000)", number=10000)
1.3468097837871085

问题不在于计算,也不在于写入文件:大量的时间都是通过将结果从内部二进制表示转换为以10为基数表示的过程中消耗的。这需要的时间是比特数的二次方,这里有很多比特。在

如果将输出行替换为:

outputFile.writelines(hex(x))

你会发现它跑得更快。转换为十六进制表示只需要在位数上呈线性的时间。在

如果您真的需要以10为基数输出巨型整数,可以考虑使用decimal模块。它在一个与基数10相关的表示中进行内部计算,然后转换为十进制字符串所需的时间与十进制位数呈线性关系。不过,您需要事先将decimal上下文的精度设置为“足够大”的值,以避免在舍入时丢失低位数字。在

相关问题 更多 >

    热门问题