同一代码分别在同一台机器上的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
答案 0 :(得分:6)
这里的行为至少有两个主要差异:
open
的处理方式从面向字节的更改(仅处理换行,甚至仅在Windows上增加了开销)变为了面向文本;两个print
都将要打印的值转换为str
,但是Python 3 str
支持整个Unicode范围,并且必须以语言环境编码进行编码才能将其写入文件打开以文本模式写入; Python 2将字节原始写入。print
从语句(具有直接字节码支持)更改为函数调用(不具有特殊解释器支持)。函数调用会产生更高的开销,尤其是在通过关键字传递参数的情况下,尤其是当您做的足够多时,预期会增加成本。我会注意到,对于任何中等高级的代码,print
的使用是很少见的。这是一个非常高的开销功能。您可以尝试仅用fout.write('1\n')
替换它,并避免大量开销。