Python 文件类型(*.py/*.pyc/*.pyo)

简述

Python 并非完全是解释性语言,它也存在编译。先将源码文件 *.py 编译为 *.pyc/*.pyo,然后由 Python 的虚拟机执行。相对于 *.py 文件来说,编译为 *.pyc/*.pyo 本质上和 *.py 没有太大区别,只是提高了模块的加载速度,并没有提高代码的执行速度

| 版权声明:一去、二三里,未经博主允许不得转载。

文件类型

  • *.py:源码文件,由 Python 程序解释。
  • *.pyc:源码经编译后生成的二进制字节码(Bytecode)文件。
  • *.pyo:优化编译后的程序,也是二进制字节码文件。

生成 *.pyc 文件

假设,有一个名为 hello.py 的源文件:

print("Hello World!")

要编译为 *.pyc 文件,需要引入 Python 中的模块 py_compile,在交互模式下输入:

>>> import py_compile
>>> py_compile.compile("hello.py")

这样,*.pyc 文件就生成了:

$ ls
hello.py  hello.pyc

编译之后的是一个二进制文件,打开:

这里写图片描述

生成 *.pyo 文件

要编译为 *.pyo 文件,需要通过 Python 解释器的选项去编译:

python -O -m py_compile hello.py

这样,*.pyo 文件就生成了:

$ ls
hello.py  hello.pyc  hello.pyo

由于经过优化,所以,一般在大小上,*.pyo 文件小于等于 *.pyc 文件。

效率对比

*.pyc/*.pyo*.py 文件一样,都可以被执行:

$ python hello.py
Hello World!
$ python hello.pyc
Hello World!
$ python hello.pyo
Hello World!

关于效率,Python 文档 “Compiled” Python files 中这样介绍:

A program doesn’t run any faster when it is read from a .pyc or .pyo file than when it is read from a .py file; the only thing that’s faster about .pyc or .pyo files is the speed with which they are loaded.

也就是说,运行速度相差无几,加载速度 *.pyc/*.pyo 稍占优势。当然,除此之外,还有一个很大的优点:隐藏源码

这些是 Python 当中较常见的几种形式,其中最常用的是 *.py,因为使用起来比较灵活,可以很容易去修改代码。

注意: Python 3.5 中不再使用 *.pyo 文件,而是引入了一种更灵活的替代机制,*.pyc 文件可以表示优化和未优化的字节码。优化级别信息可以包含在 *.pyc 文件的名字中,具体可参见:PEP 488

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一去丶二三里

有收获,再打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值