Python解释执行原理分析


Posted in Python onAugust 22, 2014

本文较为详细的分析了Python解释执行的原理,对于深入理解Python可以起到一定的帮助作用。具体分析如下:

首先,这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可以把二进制程序从硬盘载入到内存中并运行。

但是对于Python而言,python源码不需要编译成二进制代码,它可以直接从源代码运行程序。当我们运行python文件程序的时候,python解释器将源代码转换为字节码,然后再由python解释器来执行这些字节码。这样,python就不用担心程序的编译,库的链接加载等问题了。

对于python解释语言,有以下3方面的特性:

1.每次运行都要进行转换成字节码,然后再有虚拟机把字节码转换成机器语言,最后才能在硬件上运行。与编译性语言相比,每次多出了编译和链接的过程,性能肯定会受到影响。

2.由于不用关心程序的编译和库的链接等问题,开发的工作也就更加轻松啦。

3.python代码与机器底层更远了,python程序更加易于移植,基本上无需改动就能在多平台上运行。

在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。

1.编译实现的语言,如:C、C++、Fortran、Pascal、Ada。由编译型语言编写的源程序需要经过编译,汇编和链接才能输出目标代码,然后由机器执行目标代码。目标代码是有机器指令组成,不能独立运行,因为源程序中可能使用了一些汇编程序不能解释引用的库函数,而库函数又不在源程序中,此时还需要链接程序完成外部引用和目标模板调用的链接任务,最后才能输出可执行代码。

2.解释型语言,解释器不产生目标机器代码,而是产生中间代码,这种中间代码与机器代码不同,中间代码的解释是由软件支持的,不能直接使用在硬件上。该软件解释器通常会导致执行效率较低,用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。和编译的程序不同的是, 解释程序的任务是逐一将源代码的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码再执行。对于解释型语言,需要一个专门的解释器来执行该程序,每条语句只有在执行是才能被翻译,这种解释型语言每执行一次就翻译一次,因而效率低下。

3.Java解释器,java很特殊,java是需要编译的,但是没有直接编译成机器语言,而是编译成字节码,然后在Java虚拟机上用解释的方式执行字节码。Python也使用了类似的方式,先将python编译成python字节码,然后由一个专门的python字节码解释器负责解释执行字节码。

4.python是一门解释语言,但是出于效率的考虑,提供了一种编译的方法。编译之后就得到pyc文件,存储了字节码。python这点和java很类似,但是java与python不同的是,python是一个解释型的语言,所以编译字节码不是一个强制的操作,事实上,编译是一个自动的过程,一般不会在意它的存在。编译成字节码可以节省加载模块的时间,提高效率。

5.除了效率之外,字节码的形式也增加了反向工程的难度,可以保护源代码。这个只是一定程度上的保护,反编译还是可以的。

相信本文所述对于大家深入理解Python可以起到一定的促进作用。

Python 相关文章推荐
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
python中函数默认值使用注意点详解
Jun 01 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
Python实现快速大文件比较代码解析
Sep 04 Python
Python 发送SMTP邮件的简单教程
Jun 24 Python
Python Matplotlib库实现画局部图
Nov 17 Python
Python实现的石头剪子布代码分享
Aug 22 #Python
Python使用MD5加密字符串示例
Aug 22 #Python
Python中让MySQL查询结果返回字典类型的方法
Aug 22 #Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 #Python
Python with的用法
Aug 22 #Python
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 #Python
python with statement 进行文件操作指南
Aug 22 #Python
You might like
PHP下几种删除目录的方法总结
2007/08/19 PHP
php代码把全角数字转为半角数字
2007/12/10 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
常见python正则用法的简单实例
2016/06/21 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Python短信轰炸的代码
2020/03/25 Python
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
经典婚礼主持词
2014/03/13 职场文书
教师演讲稿大全
2014/05/16 职场文书
名人演讲稿范文
2014/09/16 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
承诺书模板大全
2015/05/04 职场文书
教师培训学习心得体会
2016/01/21 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android