Python解释执行原理分析

 更新时间:2014年08月22日 11:16:55   投稿:shichen2014  
这篇文章主要介绍了Python解释执行原理,有助于读者深入理解Python运行机制,需要的朋友可以参考下

本文较为详细的分析了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可以起到一定的促进作用。

相关文章

  • Selenium定时刷新网页的实现代码

    Selenium定时刷新网页的实现代码

    这篇文章主要介绍了Selenium定时刷新网页的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • python关于excel多个sheet的导入导出方式

    python关于excel多个sheet的导入导出方式

    这篇文章主要介绍了python关于excel多个sheet的导入导出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python十大列表操作技巧分享

    Python十大列表操作技巧分享

    这篇文章给大家介绍了Python十大列表操作技巧分享,列表展开,降维,分块,转置,查找众数,判断重复元素等十个操作技巧,并通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Django自定义用户认证示例详解

    Django自定义用户认证示例详解

    这篇文章主要给大家介绍了关于Django自定义用户认证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • Python实现处理Excel数据并生成只读模式

    Python实现处理Excel数据并生成只读模式

    这篇文章主要为大家详细介绍了如何使用 Python 处理 Excel 数据,并生成只读模式的 Excel 文档,文中的示例代码简洁易懂,有需要的小伙伴可以参考下
    2023-11-11
  • python 如何用terminal输入参数

    python 如何用terminal输入参数

    这篇文章主要介绍了python 如何用terminal输入参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 用python与文件进行交互的方法

    用python与文件进行交互的方法

    本篇文章主要介绍了用python与文件进行交互的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 利用pandas按日期做分组运算的操作

    利用pandas按日期做分组运算的操作

    这篇文章主要介绍了利用pandas按日期做分组运算的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python使用DebugInfo模块打印一个条形堆积图

    python使用DebugInfo模块打印一个条形堆积图

    今天介绍一个不使用 matplot,通过 DebugInfo模块打印条形堆积图的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-08-08
  • Python 如何创建一个简单的REST接口

    Python 如何创建一个简单的REST接口

    这篇文章主要介绍了Python 如何创建一个简单的REST接口,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论