Python能把用其他语言编写的各模块(尤其是C/C++)轻松地联结在一起。用Python快速生成程序原型(有时甚至是程序最终界面),然后对其中有特别要求的部分,用更合适的语言改写,而后封装为Python可调用的扩展类库。
Python 提供了一种中间编译结果保存机制,即 byte code,或更准确地说,保存 PyCodeObject。事实上,Python 确实提供了这样一种机制 —— .pyc 文件。在执行一个 .py 文件的源代码之后,Python 并不会自动生成与该 .py 文件对应的 .pyc 文件。Python 会根据需要自动触发、创建 .pyc 文件,原理很简单,就是利用 Python 的 import 机制。
在 Python 运行过程中如碰到 import abc 这样的语句,Python 将会在设定好的 path 中寻找 abc.pyc 或 abc.dll 文件。若没有这样的文件,而只是发现了 abc.py 文件,那么,Python 会首先将 abc.py 编译成相应的 PyCodeObject 中间结果,然后再创建 abc.pyc 文件,并将中间结果写入该文件。接下来,Python 才会对 abc.pyc 文件进行一个 import 动作,实际上也就是将 abc.pyc 文件中的 PyCodeObject 重新在内存中复制出来,加以运行。
由于 Python .pyc 文件的此种运行机制,所以,可随时删除所有中间过程 .pyc 文件,当 Python 再次运行时,还会重生成这些 .pyc 文件,对您所编辑程序的运行并无任何影响。当然,得有源代码才行。
.py 文件
以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行。当然,也可用文本编辑器进行修改。
.pyc 文件
以 .pyc 作扩展名的文件是 python 编译文件。.pyc 文件是不能用文本编辑器进行编辑的,其优点是 .pyc 文件的执行速度要远快于 .py 文件。
因为 .py 文件是可直接看到源码的,软件开发商就需将.py编译成 .pyc 后再发布。
.pyw 文件
.pyc 文件执行时,桌面会出现类似 CMD 命令的黑色 shell 窗口。
.pyw 文件与 .pyc 文件的执行,本质上并没什么区别,只是用 pythonw.exe 运行.pyw 文件时不会出现类似 CMD 命令的黑色 shell 窗口。主要用于GUI程序发布时不需要看到控制台信息的情况。
值得一提的是,开发纯 GUI 图形用户界面程序时,可暂时把 .pyw 改成 .py,以便运行时调出控制台窗口,看到所有错误信息,方便修改、调试。
.pyo 文件
.pyo 文件是优化编译后的程序。 “python -O 源文件” 即可将源程序编译为 .pyo 文件。同样,.pyo 文件也是不能用文本编辑器进行编辑的。
.pyx 文件
.pyx文件是python的c扩展文件,代码要符合cython的规范。pyx文件还仅仅是源代码文件,要想被python调用,还要通过cython转成.c文件,并且在windows下再进一步转成.pyd文件,或者在linux转成.so文件。
.pyd 文件
.pyd 文件python动态模块,一般是c或者c++编写,其实可以说是D语言编写的。
在py可见范围内,可以直接通过关键字import进行导入使用。
pyd实质上还是dll文件,dll是windows平台动态链接库文件(Dynamic Link Library),py调用dll需要通过内嵌模块ctypes来间接调用,而pyd是windows平台可被py直接调用的可执行文件。
备注:动态链接库.dll对应WINDOWS;共享库.so对应LINUX