+-

我正在阅读 Python解释器,因为我无法理解为什么有些东西有python编译对象(.pyc),但其他人没有.
我得到了我的问题的答案,但现在我很困惑.好吧,解释器将一个脚本编译成一个模块……如果我正确地理解了这一点,它就像C中的一个对象一样(C程序员在这里,对Python来说是新手) – 或者我想更像是.class在Java中,因为它是编译的字节码,而不是本机指令……无论如何,当你导入一个脚本时,或者如果你明确地称它为编译它(由于某种原因不太有利),它会这样做.
那么根据这种理解,编译后的字节码之间是否存在运行时差异?假设只有一个解释器(一个字节码解释器),它意味着如果模块尚未编译,它必须在进行解释之前进行语法/ lexing /解析(编译).这不会导致更高的执行时间吗?
因此,如果你认为上述内容是真的,那么显然最好将模块编译成.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;博士:别担心.
点击查看更多相关文章
转载注明原文:Python实践强制执行字节码编译? (pyc文件) - 乐贴网