为什么要编译Python脚本?您可以直接从.py文件运行它们,它工作得很好,那么是否有性能优势或其他什么?

我还注意到我的应用程序中的一些文件被编译成.pyc,而其他文件则没有,这是为什么?


当前回答

它被编译成字节码,使用起来非常非常快。

有些文件没有被编译的原因是,每次运行脚本时,你用python main.py调用的主脚本都会被重新编译。所有导入的脚本都将被编译并存储在磁盘上。

Ben Blank补充的重要内容:

值得注意的是,在运行 编译脚本启动速度更快 时间(因为它不需要时间 编译后),它不运行任何文件 得更快。

其他回答

它被编译成字节码,使用起来非常非常快。

有些文件没有被编译的原因是,每次运行脚本时,你用python main.py调用的主脚本都会被重新编译。所有导入的脚本都将被编译并存储在磁盘上。

Ben Blank补充的重要内容:

值得注意的是,在运行 编译脚本启动速度更快 时间(因为它不需要时间 编译后),它不运行任何文件 得更快。

在运行编译脚本时,肯定会有性能差异。如果运行普通的.py脚本,每次运行时机器都会编译它,这需要时间。在现代机器上,这几乎不明显,但随着脚本的增长,这可能会成为一个更大的问题。

我们使用编译后的代码分发给无法访问源代码的用户。基本上是为了防止没有经验的程序员在没有告诉我们的情况下意外地更改某些内容或修复错误。

初学者认为Python是通过.pyc文件编译的。.pyc文件是编译后的字节码,然后对其进行解释。因此,如果您之前运行过Python代码,并且手边有.pyc文件,那么第二次运行时它会运行得更快,因为它不必重新编译字节码

编译器: 编译器是将高级语言转换为机器语言的一段代码

翻译: 解释器还将高级语言转换为机器可读的对等二进制。每次解释器获得要执行的高级语言代码时,它在将代码转换为机器代码之前将其转换为中间代码。代码的每一部分都被解释,然后按顺序分别执行,如果在代码的某一部分中发现错误,它将停止对代码的解释,而不翻译下一组代码。

来源: http://www.toptal.com/python/why-are-there-so-many-pythons http://www.engineersgarage.com/contribution/difference-between-compiler-and-interpreter

运行编译过的python时性能有所提高。然而,当你将.py文件作为导入模块运行时,python将编译并存储它,只要.py文件没有改变,它将始终使用编译后的版本。

对于任何语言,当文件被使用时,过程看起来像这样: 1. 文件由interpeter处理。 2. 文件已编译 3.执行已编译的代码。

显然,通过使用预编译代码,你可以省去第2步,这适用于python, PHP和其他。

这里有一篇有趣的博客文章解释了它们的区别http://julipedia.blogspot.com/2004/07/compiled-vs-interpreted-languages.html 这里有一个解释Python编译过程的条目http://effbot.org/zone/python-compile.htm