python的解释器和字节码编译

.  Python 解释器

       Python 是一门编程语言,同时也是一个解释器的软件包。 解释器是一种让其他程序运行起来的程序。 当你编写了一段Python 程序,Python 解释器将读取程序,并按照其中的命令执行,得出结果。解释器是代码与计算机硬件之间的软件逻辑层。

       当Python 包安装后,它包含了一些最小化的组件: 一个解释器和支持的库。 根据使用情况的不同,Python 解释器可能采取可执行程序的形式,或者作为链接到另一个程序的一系列库。 按照使用的Python 版本的不同,解释器本身可以用C程序实现,或者一些Java 类实现,或者其他形式。 无论采用哪种形式,编写的python代码必须在解释器中运行,所以,要运行Python,必须先安装Python 解释器。

 

.  Python 程序执行过程

 

2.1 字节码编译

       当程序执行时,Python 内部(对大多数用户是完全隐藏的)会先将源代码编译成字节码的形式。 编译是一个简单的翻译过程,而且字节码是源代码底层的,与平台无关的表现形式。 概括的说,Python 通过把每一源语句分解为单一步骤来将这些源语句翻译成一组字节码指令。 这些字节码可以提高执行速度,比起文本文件中的原始代码语句,字节码的运行速度要快很多。

       翻译过程对用户来说是隐藏的,如果Python 进程在机器上有写入的权限,那么它将程序的字节码保存为一个以.pyc为扩展名的文件,pyc文件就是编译过的py源文件。 当程序运行后,会在相同的目录下查看这些pyc文件。

       Python 这样保存字节码是作为一种启动速度的优化。 在下一次运行程序时,如果在上次保存字节码之后没有修改过源代码,Python将会加载pyc 文件,并跳过编译这个步骤。 当pyhon 必须重新编译时,它会自动检查源文件的时间戳,如果又保存了源代码,下次程序运行时,字节码将自动重新创建。

       如果Python 无法在机器上写入字节码,程序仍然可以工作,此时字节码将会在内存中生成并在程序结束时简单丢弃。 尽管这样,由于pyc 文件能够加速启动,对于大型程序,应该给与python写入权限,如果保存了pyc文件,能加速程序的程序。

 

 

2.2  Python 虚拟机(PVM

       一旦程序编译成字节码或者字节码从已经存在的pyc 文件中载入,之后的字节码被发送到称为Python虚拟机(Python Virtual Machine)上来执行。PVM 就是迭代运行字节码指令的一个大循环,一个接一个地完成操作。 PVM 是Python 的运行引擎,它时常表现为Python系统的一部分,并且它是实际运行脚本的组件。 这步操作也就是Python 解释器的最后步骤。

 

2.3 性能

       C和C++这类完全编译语言需要build 或者make,但是Python 字节码不是机器的二进制代码,不需要进行make的步骤。

       这也是Python代码无法运行得像C或者C++代码一样快的原因,因为PVM循环仍然需要解释字节码,并且字节码指令与CPU指令相比需要更多的工作。 和其他经典的解释器不同,这里仍有内部的编译步骤:python 并不需要反复地重分析和重分解每一行语句,实际的效果就是纯Python 代码的运行速度介于传统的编译语言和传统的解释语言之间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值