16

我知道 .py 和 .pyc 文件之间的区别。我的问题不是关于如何而是关于为什么根据文档

从 .pyc 或 .pyo 文件中读取程序时,程序运行的速度并不比从 .py 文件中读取时快;.pyc 或 .pyo 文件唯一更快的是它们的加载速度。

.pyc 文件加载导入更快。但是在加载 .pyc 文件的“运行”部分后,与 .py 文件中的“运行”部分花费的时间相同吗?这是为什么?我本来希望

  • 位代码 (.pyc) 更接近 Python 虚拟机,因此运行速度更快
  • .py 文件在执行之前被编译为 .pyc。这需要额外的步骤,因此会花费时间。

我的问题:在导入部分之后,为什么 .pyc 文件的运行部分与 .py 文件相比没有加快执行速度?

4

2 回答 2

23

当你运行一个.py文件时,它首先被编译成字节码,然后被执行。这种文件的加载速度较慢,因为对于 a .pyc,编译步骤已经执行,但是在加载之后,完成了相同的字节码解释。

在伪代码中,Python 解释器执行以下算法:

code = load(path)
if path.endswith(".py"):
    code = compile(code)
run(code)
于 2013-05-27T12:37:14.047 回答
11

程序的运行方式始终相同。编译的代码被解释。

加载程序的方式不同。如果有当前pyc文件,则将其作为编译版本,因此在运行命令之前无需执行编译步骤。否则py文件被读取,编译器必须编译它(这需要一点时间),但是内存中的编译版本会像其他方式一样被解释。

于 2013-05-27T12:38:44.137 回答