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的字节码。

Python执行机制的更多相关文章

  1. SaltStack 的远程执行机制

    html,body { font-size: 15px } body { font-family: Helvetica, "Hiragino Sans GB", "微软雅 ...

  2. 【Python&数据结构】 抽象数据类型 Python类机制和异常

    这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...

  3. python执行方式及变量

    .python执行方式 (1)交互式:调试方便,无法保存代码 (2)命令行方式:可以永久保存代码 (3)python执行阶段 先启动python解释器,解释器像文本编辑器一样将文件内容从硬盘读到内存, ...

  4. 理解Python命名机制

    理解Python命名机制 本文最初发表于恋花蝶的博客(http://blog.csdn.net/lanphaday),欢迎转载,但必须保留此声明且不得用于商业目的.谢谢. 引子 我热情地邀请大家猜测下 ...

  5. 20191031:Python底层机制

    20191031:Python底层机制 python底层从3个方面来说,分别是: 引用计数机制 垃圾回收机制 内存池机制 引用计数机制 使用引用计数来追踪内存中的对象,所有对象都有引用计数,并且这个引 ...

  6. Python执行系统命令的方法 os.system(),os.popen(),commands

    os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...

  7. python执行linux的shell命令

    python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system(" ...

  8. python执行mysqldump命令

    本文简单讲述如何利用python执行一些sql语句,例如执行mysqldump命令,进行数据库备份,备份成sql文件 #!/usr/bin/python#导入os模块import os#导入时间模块i ...

  9. JavaScript定时器与执行机制解析

    从JS执行机制说起 浏览器(或者说JS引擎)执行JS的机制是基于事件循环. 由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行. 为了避免因为 ...

随机推荐

  1. Back to Basics: RAII and The Rule of Zero

    本文整理了Arthur O'Dwyer在CppCon 2019上关于RAII的演讲,演讲的slides可以在此链接进行下载. 在C++程序中,我们往往需要管理各种各样的资源.资源通常包括以下几种: A ...

  2. SpringBoot 自定义内容协商策略 configureContentNegotiation

    在自定义的config配置类中,重写configureContentNegotiation方法 @Bean public WebMvcConfigurer webMvcConfigurer(){ re ...

  3. Redis 中 String 类型的内存开销比较大

    使用 String 类型内存开销大 1.简单动态字符串 2.RedisObject 3.全局哈希表 使用 Hash 来存储 总结 参考 使用 String 类型内存开销大 如果我们有大量的数据需要来保 ...

  4. 关于tomcat 访问80端口失效 阿里云问题版

    可能有朋友在配置完阿里云  配置好服务器发现 使用默认80端口访问网址失效 用8080依然失效  - -放心你用什么都会失效 并且你怎么杀接口也没用 答案就是 你的里面绝对没有80 和8080  你没 ...

  5. 【基础篇】js对本地文件增删改查--查

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  6. 『无为则无心』Python面向对象 — 57、类属性和实例属性

    目录 1.类属性 (1)类属性的访问 (2)修改类属性 2.类属性和实例属性区别 1.类属性 (1)类属性的访问 类属性就是 类对象 所拥有的属性,它被 该类的所有实例对象 所共有. 类属性可以使用 ...

  7. ceph-deploy离线部署ceph集群及报错解决FAQ

    ceph-deploy部署ceph集群 环境介绍 主机名 ip地址 操作系统 角色 备注 ceph-node1 10.153.204.13 Centos7.6 mon.osd.mds.mgr.rgw. ...

  8. 安装CentOS7出现dracut:/#……time解决办法

    当选择install CentOS7以后一会就会出现错误.报错信息:就是dracut:/# ... timeout一大堆.我本来以为是我的启动盘没做好,后来我又重做了好几次都是这问题. 解决 通过搜索 ...

  9. 【C# 集合】HashTable .net core 中的Hashtable的实现原理

    上一篇我介绍了Hash函数 这篇我来说一下Hash函数在 HashTable中的应用. HashTable的特性: 1.装载因子:.net core 0.72 ,java 0.75 2.冲突解决方案: ...

  10. 泛型种树(generic) 代码

    再这个案例中我们,为什么要使用泛型约束 使用约束的原因 约束指定类型参数的功能和预期. 声明这些约束意味着你可以使用约束类型的操作和方法调用. 如果泛型类或 方法对泛型成员使用除简单赋值之外的任何操作 ...