谈到了Python语句的两种执行方式,实际上,这两种运行方式在本质 上是相同的,它们都是由解释器来解释执行我们提供的Python语句。 这里所说的解释执行是相对于编译执行而言的。我们知道,使用诸如 C或C++之类的编译性语言编写的程序可以从源文件转换成计算机使用 的机器语言, 经连接器连接后形成二进制可执行文件。当我们运行二进制可执行程 序的时候,因为已经编译好了,所以加载器软件把二进制程序从硬盘 载入内存中并运行。

与之不同,Python语言写的程序不需要编译成二进制代码,它可以直 接从源代码运行程序。当我们运行Python文件程序的时候, Python解释器把源代码转换成中间形式:字节码,然后再由Python虚 拟机来执行这些字节码,如图5所示。 这样的话,我们就用不着担心程序的编译,库的连接加载等问题了, 所有这些工作都由Python虚拟机代劳了。 对于Python的解释语言特性,我们要一分为二的看待。一方面,每次 运行时都要进行转换成 字节码,然后再由虚拟机把字节码转换成机器语言,最后才能在硬件 上运行。较之于编译性 编程 语言,每次运行都会多出两道工序,所以它的性能会受到影响。另一 方面,由于不用关心程 序的编译以及库的连接等问题,所以开发工作会变得更轻松;同时虚 拟机距离物理机器更远 了, 所以Python程序更加易于移植,实际上无需改动就能在多种平台上运 行。

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

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

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

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

(Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8--在虚 拟机还未出现前--是通过解释成语法树执行。)

Python是一个解释型的语言。但是为了效率上的考虑,Python也提供 了编译的方法。编译之后是bytecode的形式。Python也提供了和Java 类似的VM来执行这样的bytecode。不同的是,因为Python是一个解释 型的语言,所以编译(compile)不是一个强制的操作。事实上,编 译是一个自动的过程。多数情况下,你甚至不会在意他的存在。编译 成bytecode可以节省加载模块的时间,从而提高效率

除了效率原因,bytecode也增加了反向工程的难度,在某种程度上保 护你的代码。当然,反编译仍然是可以的。所以如果真的想保护代码 ,还是用别的方法吧。

另外Python还提供了-O选项,可以编译生成“优化”的bytecode,文 件扩展名是.pyo。但实际上优化的内容有限,作用不大。

如果希望生成可执行文件,就要依赖于第三方的工具了。

分享到:

2010-04-21 11:00

浏览 7200

评论

python采用解释方式执行_Python解释执行原理相关推荐

  1. python采用的是基于_Python采用的是基于____的内存管理方式

    Python采用的是基于____的内存管理方式 答:值 中国大学MOOC: 四大基本设计原则是 答:对齐.重复.亲密.对比 下列不属于软件调试技术的是 答:集成测试法 短视频类APP在11点至12点. ...

  2. python主线程执行_python 并发执行之多线程

    正常情况下,我们在启动一个程序的时候.这个程序会先启动一个进程,启动之后这个进程会拉起来一个线程.这个线程再去处理事务.也就是说真正干活的是线程,进程这玩意只负责向系统要内存,要资源但是进程自己是不干 ...

  3. python动态运行py代码_Python 动态执行

    Python 动态执行 2015-06-16 Tuesday 在 Python 中,允许通过 exec 和 eval 执行以字符串形式表示的代码片段,这体现了动态语言的特性,可以让代码变得更灵活.实际 ...

  4. web3j采用call方式查询智能合约执行结果

    以太坊在调用智能合约中的函数时,即使交易成功发布到区块链上,但是如果合约参数检查出错,交易执行会失败,这个时候调用端仍然能够查询到交易被打包,但是交易执行结果跟期望的会不相符. 假设一个智能合约中有一 ...

  5. python os.popen.readlines异常_python中执行sed命令操作源文件时出现错误

    我想在python中执行一个sed命令,第一种方法直接指定文件时,可以正确输出结果,但是第二种我打开文件操作的时候就有问题,不知道什么原因,求高手解答?(1)>>>sedcmd=&q ...

  6. python中doc=parased.getroot()_python中执行sed命令操作源文件时出现错误

    我想在python中执行一个sed命令,第一种方法直接指定文件时,可以正确输出结果,但是第二种我打开文件操作的时候就有问题,不知道什么原因,求高手解答? (1) >>> sedcmd ...

  7. python 定时执行_python定时执行任务 轻量级

    python 中有一个轻量级的定时任务调度的库:schedule.他可以完成每分钟,每小时,每天,周几,特定日期的定时任务.因此十分方便我们执行一些轻量级的定时任务. 代码如下:1 import sc ...

  8. python导入模块不执行_python 不执行

    [人间也值得] - Mryang带你快速入门第一个 Python 程序 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/kese7952/article ...

  9. 使用multiprocesss模块进程通信采用队列方式,子进程run执行完一直不能退出的问题

    进程间通信常用的方法有信号量.共享内存.消息队列,python的multiprocesss模块提供了与平台无关的进程相关的API 在项目中使用 multiprocesss 多进程编程时遇到奇怪的问题是 ...

最新文章

  1. Windows HTML本地快速渲染轨迹线
  2. 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致
  3. java:BufferedReader接受输入进来的2个数字,并将它们相加
  4. ETHNET DHCP的两种方式
  5. Jackson 注解 -- 使用 Map存储JSON
  6. [Java]将二叉树的左右子树交换 非递归实现
  7. C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6
  8. uva 11269——Setting Problems
  9. 数据库原理及应用【五】安全性和完整性约束
  10. Python time datetime常用时间处理方法
  11. 实战 | 我创造了新的编程语言!
  12. C++之继承探究(二):protected成员
  13. VS2015+OpenCV3.4.2+Win10+简单调用摄像头
  14. go语言阶段综合练习--家庭收支软件的示例--过程版本
  15. Google Maps API(Flash 版)- Flash CS3 教程
  16. 使用C语言判断一个数是否为素数
  17. 党建管理系统开发,组织部干部人事任免平台建设方案
  18. TPU 使用TPU训练tensorflow初探(Colab)
  19. 斯蒂文斯理工学院计算机科学硕士,斯蒂文斯理工学院计算机科学computer science专业排名第201~250名(2020THE泰晤士高等教育世界大学排名)...
  20. rstudio中读取数据_如何在RStudio中预览数据

热门文章

  1. 电源管理芯片:LED驱动电源芯片的计划及面积
  2. 学什么编程语言比较好?
  3. ​贝叶斯神经网络最新综述
  4. 「新拟物化」过时了!此刻你最应该拥抱的是「玻璃拟物化」
  5. java pdfreader去除水印_Java - PDF操作库 ItextPdf和PdfBox添加水印
  6. SR技术概述与基本概念(SR-BESR-TE)
  7. 工具_SETUNA2、3下载,截图小工具,SETUNA github下载
  8. leetcode1229. 安排会议日程
  9. Tello和ROS的一些资料
  10. 神经网络之过拟合与欠拟合