python - 为什么python3写文件比python2慢

标签 python python-3.x file-io python-2.x

同样的代码在同一台机器上分别跑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

最佳答案

这里至少有两个主要的行为差异:

  1. open 句柄从面向字节(仅处理换行符转换,即使在 Windows 上只会增加开销)变为面向文本; print 都将要打印的值转换为 str,但是 Python 3 str 支持整个 Unicode 范围并且必须编码为将其写入以文本模式打开以写入的文件的语言环境编码; Python 2 写入原始字节。
  2. print 从语句(直接字节码支持)更改为函数调用(没有特殊解释器支持)。函数调用的开销更高,尤其是当参数通过关键字传递时,并且您执行的这些操作足够多,预计成本会增加。

我会注意到,对于任何中等高级的代码,print 的使用都很少见;这是一个非常高的开销函数。您可以尝试将其替换为 fout.write('1\n') 并避免大量开销。

关于python - 为什么python3写文件比python2慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57104274/

相关文章:

c - 如何通过 block 设备打开文件

java - 如何用Java将二进制写入文件

r - 以交互方式保存文件?

python - 如何从 pandas groupby 的多个列中获取唯一值

python - Maketrans 不适用于 python3.4 的 petl

Python telnet 连接失败

Python django 渲染时重定向 url

python - 带 pandas 的水平条形图左侧的输出表

使用 xml.etree.ElemenTtree 和请求时出现 Python TypeError

python - 如何使异步池可取消?