gpt4 book ai didi

强制执行字节码编译的 Python 实践? (.pyc)

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:46 24 4
gpt4 key购买 nike

我正在阅读有关 Python 解释器的资料,因为我不明白为什么有些东西有 python 编译对象 (.pyc),而其他东西没有。

我得到了问题的答案,但现在我很困惑。好吧,解释器将脚本编译成一个模块……如果我理解正确的话,它“有点”像 C 中的一个对象(这里是 C 程序员,Python 的新手)——或者我想更像是一个 .class在 Java 中,因为它是编译的字节码,而不是 native 指令......无论如何,当您导入脚本时,或者如果您明确调用它进行编译(由于某种原因不太有利),它都会执行此操作。

那么在这种理解下,编译字节码和未编译字节码之间是否存在运行时差异?假设只有一个解释器(字节码解释器),这意味着如果模块尚未编译,它必须在进行解释之前立即进行语法/词法分析/解析(编译)。这不会导致更长的执行时间吗?

因此,如果您认为上述情况属实,那么显然最好将模块编译成 .pyc,而不是作为标准的 .py 脚本即时运行。

这是否意味着最好在主运行中尽可能少地执行?

我认为,如果您的入口点有任何硬核逻辑(即我的入口点有几个树遍历和其他重比较),那么入口点本身不应该被包装以便编译吗?

也就是说,代替:

# file.py:
def main():
<stuff goes here - setup, whatever shared resources different modules need, etc.>

main()

这样做会更好吗:

# wrapper.py:
from file.py import *
main()

希望我已经很好地解释了我的问题。很可能我对解释器/编译器在 Python 中的使用方式有错误的理解,这个问题甚至不合理 - 我对 Python 很陌生。

TIA

最佳答案

你是对的:

1) .pyc 文件是 Python 源代码编译成字节码的缓存副本

2) 导入模块时会创建.pyc文件

3) 你在python命令行上命名的主程序没有编译成.pyc

4) 因此主程序每次运行都要编译。

但是:

主程序被编译为字节码,然后解释字节码,因此只有很小的开销(编译),主程序中的所有执行都没有持续的开销。编译的额外时间与文件中的行数成正比,而不是这些行被执行的次数。

tl;dr:别担心。

关于强制执行字节码编译的 Python 实践? (.pyc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com