同样的代码在同一台机器上分别跑Python3.6和Python2.7,程序只是循环写文件,结果python3.6居然比python2.7慢多了。那是为什么呢? @ubuntu18.04
# python3.6
import time
tt1 = time.time()
with open('test1.txt', 'w') as fout:
for i in range(1000000):
print(1, file=fout)
print (time.time()-tt1)
输出:0.6536719799041748
# python2.7
import time
tt1 = time.time()
with open('test1.txt', 'w') as fout:
for i in xrange(1000000):
print >> fout, 1
print(time.time() - tt1)
输出:0.1888
最佳答案
这里至少有两个主要的行为差异:
open
句柄从面向字节(仅处理换行符转换,即使在 Windows 上只会增加开销)变为面向文本;print
都将要打印的值转换为str
,但是 Python 3str
支持整个 Unicode 范围并且必须编码为将其写入以文本模式打开以写入的文件的语言环境编码; Python 2 写入原始字节。print
从语句(直接字节码支持)更改为函数调用(没有特殊解释器支持)。函数调用的开销更高,尤其是当参数通过关键字传递时,并且您执行的这些操作足够多,预计成本会增加。
我会注意到,对于任何中等高级的代码,print
的使用都很少见;这是一个非常高的开销函数。您可以尝试将其替换为 fout.write('1\n')
并避免大量开销。
关于python - 为什么python3写文件比python2慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57104274/