python中加载时间和运行时间之间的差异?

python中加载时间和运行时间之间的差异?,python,time,module,loading,Python,Time,Module,Loading,我引用了Python文档的一部分: “从.pyc或.pyo文件读取程序的运行速度并不比从.py文件读取程序的运行速度快;关于.pyc或.pyo文件,唯一更快的是加载速度。” 我不明白当它说它不影响运行时间而是影响加载时间时是什么意思?有人能给我详细解释一下吗?当您导入模块test.py时,Python必须读取源代码并将其转换为Python可以执行的字节码。这需要时间,但Python会将其存储在test.pyc中。此字节码是将代码分解为更简单的术语的结果,可以直接在CPython虚拟机上运行 如果

我引用了Python文档的一部分: “从.pyc或.pyo文件读取程序的运行速度并不比从.py文件读取程序的运行速度快;关于.pyc或.pyo文件,唯一更快的是加载速度。”


我不明白当它说它不影响运行时间而是影响加载时间时是什么意思?有人能给我详细解释一下吗?

当您导入模块
test.py
时,Python必须读取源代码并将其转换为Python可以执行的字节码。这需要时间,但Python会将其存储在
test.pyc
中。此字节码是将代码分解为更简单的术语的结果,可以直接在CPython虚拟机上运行

如果加载
test.pyc
,Python在运行之前不需要将源代码编译成字节码,因此启动所需的时间稍微少一些


如果两次导入模块
test.py
,而不修改它或删除生成的
test.pyc
,Python检查test.pyc是否存在,并将其加载-因此性能优势是自动的。

将您编写的Python代码转换为计算机可以理解的指令有两个步骤:

  • 编译步骤。原始Python代码被转换为Python。任何操作系统、任何硬件上的Python解释器都可以识别该字节码。这是存储在.pyo或.pyc文件中的内容

  • 解释步骤。Python解释器,或者如果您更喜欢Python虚拟机,将解释字节码并向计算机发送低级指令。这些低级指令在Linux和Windows之间,或者在Intel芯片和AMD之间,等等都是不同的,因此必须有人为Python可以运行的每种类型的系统编写不同的解释器


  • 当您从.pyc文件运行代码时,步骤1已经完成,因此直接执行步骤2。但第2步的运行速度与您在运行它之前立即编译它时的运行速度一样快。编译步骤是否会显著降低代码的速度取决于程序的功能。您应该进行实验,看看等待代码编译所需的差异有多大,但如果您编写的是短脚本,则差异可能不会被注意到。

    更确切地说,
    .pyc
    文件仅在导入
    .py
    文件时生成,Python解释器——实际执行任务的程序——在编写Python代码时并不理解它。相反,它将其转换为一个较低级别的版本,称为“字节码”,并执行该版本。此转换需要时间,但只需执行一次,因此结果将存储在
    .pyc
    文件中,供以后使用。@Katrielex:请以答案的形式给出您的回答