python---之pycodeobject与pyc文件

1.Python程序的执行过程

Python解释器(interpreter)在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生的一组Python的字节码(byte code),然后将编译的结果交给Python虚拟机(Virtual Machine),由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作。

对比java的执行:

java:     .java-->(javac)-->.class-->(java)-->结果

python: .py  -->(编译器)-->.pyc-->(虚拟机)-->结果

从上面可知:Python对源码的编译结果是产生的一个.pyc文件,这其实并不太准确。

如:

~/code/py/dis/demo.py

复制代码
1 class A:
2     pass
3 def f():
4     pass
5 a = A()
6 f()
复制代码

执行:python demo.py,并没有产生.pyc文件。

分析如下:

对于Python编译器来说,PyCodeObject对象是其真正的编译结果,而pyc文件只是这个对象在硬盘上的表现形式。

在程序的运行期间,编译结果存在于内存的PyCodeObject对象中;而运行结束后,这个编译结果又被保存到pyc文件中。当下次运行相同的程序时,Python会根据pyc文件中记录的编译结果直接建立内存中PyCodeObject对象,而不用再次对源码进行编译了。

把py文件的编译结果保存到pyc文件,最大的优点在于在运行程序时,不需要对该源码重新进行编译。所以,需要编译形成pyc文的应该是那些可以重用的代码。

对于仅仅运行一次的程序,保存其对于的pyc文件时没有必要的。

 如果程序要执行import导入模块的操作,程序运行时会触发pyc文件的生成(如果该模块在PATH路径下与之已有匹配的pyc文件,不需生成直接使用即可)

转载:https://www.cnblogs.com/fortwo/archive/2013/05/10/3071699.html

猜你喜欢

转载自blog.csdn.net/zxyhhjs2017/article/details/80580816