1.4 Python执行机制

Python中IDLE是其自带的集成开发工具(IDE:同时拥有编辑、编译、调试、运行等多种功能的集成工具),并且它也是Python自带的编译器和解释器。

1.4.1 Python执行过程

1,我们通过文本编辑器或用自带的IDLE编辑器创建py文件,并在其中编写Python命令,编辑完成并调试无误后保存。

2,通过在IDLE中执行Run Module(或快捷键F5)运行程序,运行的过程本质是IDLE先调用自身的编译功能转换该程序为二进制形式的中间编码,并整理为PyCodeObject对象形式暂时保存在内存中,然后由解释器逐行解释得到最终结果。

1.4.2 Python编译器

计算机不能直接理解机器语言(二进制语言)以外的其他语言,所以必须把由高级语言编写的程序翻译为机器可执行的机器语言,才能被计算机识别并执行。实现某种编程语言的这个翻译功能的机制被称为编译。实现编译功能的程序叫编译器。

1.4.3 Python解释器

经过Python编译器编译后形成中间编码并整理成PyCodeObject对象形式暂时保存在内存中。此时电脑CPU仍然无法直接执行,需要经过解释器进行解释,再次翻译成CPU能够直接执行的各种计算机指令。Python是一门解释性语言,意味着Python在执行时是通过Python解释器翻译一行执行一行,如此循环往复直到所有的命令都执行完毕。在Python中解释器主要的功能实现有三点:

1,把编译得到的在内存中的pyCodeObject程序对象转告给计算机处理模块,告诉它先后处理顺序。

2,判断提交给处理器的已经编译过的pyCodeObject程序对象是否具有可重用性,若该对象有可重用性就将其保存到.pyc文件中,以便下次再用到时直接调用,不需再编译。

3,解释器将计算机处理器运算后的结果呈现出来或返回给被调用处。

因为要一行一行翻译后执行,所以像Python这种解释性语言运行起来速度会受到一定的影响。C语言是通过编译器直接将脚本一次性翻译成电脑能够看懂并执行的指令,执行起来会比Python快很多。而Java既可以用解释器也可以用编译器。

为什么Python不直接采用编译器从而提高其运行速度呢?原因如下:

1、这么做的意义不大,真正拖慢Python速度的不是解释器,而是其动态性的语言设计,很多特性要依赖于程序元数据。比如语句a+b,在执行它之前,电脑根本就不知道a和b是什么,是执行整数运算呢?还是浮点数运算?要知道,一般的计算机,执行整数运算和浮点数运算的运算单元是不一样的。

2、编译成机器码可能在数值运算方面的性能会得到提升,但其他方面未必会得到显著的性能提升。而且编译也是要花时间的,C++的编译就经常超过半小时。

1.4.3.1 常见Python解释器

1,CPython

当我们从Python官方网站下载并安装好Python后,就获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。启动IDLE就是启动CPython解释器。CPython是使用最广的Python解释器。

2,IPython

IPython是基于CPython之上的一个交互式解释器,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

3,PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译,所以可以显着提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy对最新的第三方Python库支持得不是很好,有滞后性。

4,Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

5,IronPython

IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

最新文章

  1. Ubuntu下Android Studio环境搭建
  2. Visual Studio 2015 如何将全英界面转成中文
  3. STM32正交编码器驱动电机
  4. javaweb--HTTP状态码
  5. 03-Vue入门系列之Vue列表渲染及条件渲染实战
  6. OC6_代理的基本概念
  7. 获利能力分析COPA的BAPI:BAPI_COPAACTUALS_POSTCOSTDATA 通过增强返回凭证号
  8. centos 给终端设快捷键
  9. 10分钟 教你学会Linux/Unix下的vi文本编辑器
  10. nautilus-open-terminal右键随处打开终端
  11. Chrome设计文档-多进程资源加载
  12. UVA 10718 Bit Mask 贪心+位运算
  13. 机器学习 数据挖掘 推荐系统机器学习-Random Forest算法简介
  14. python+selenium自动化测试_1
  15. java 动态代理 , 多看看。 多用用。
  16. IOS-QQ第三方登录
  17. 微信小程序记账本进度五
  18. Linux基础命令---lpc打印机控制
  19. 初识Scala
  20. linked-list-cycle-ii (数学证明)

热门文章

  1. figlet 一个在linux生成字符串图案的玩具
  2. JMM之synchronized关键字
  3. MyBatis源码环境搭建
  4. web开发 小方法1-禁止横向滚动
  5. k8s被删除的pod一直Terminating状态
  6. Linux系统日志清除实验
  7. 解决overlay2存储驱动的磁盘配额问题
  8. 【C# 异常处理】 开端
  9. c++ stringstream 实现字符串与int之间的转换
  10. pip:各项指令