Python公开课 - 解释器详解

前言

解释器就是帮助我们将Python代码,也就是.py文件,交给机器可以执行的工具。

解释型语言与编译型语言

通常我们将Python和Java语音归为解释型语言,而对于C/C++则归为编译型语音,为什么这样划分呢,以下的一张图可以很好的说明

解释型语言与编译型语言

编译型

  1. 用户提交源码
  2. 编译器将源码编译成机器语音,但是这时候还不能执行,因为缺少启动代码和相关的库代码
  3. 针对2中的问题,连接器上场了,他主要用来找到以上缺少的代码,并进行组装成最后机器可以直接运行的可执行文件

解释型

  1. 用户提交源码
  2. 解释器将源码转化为字节码,在Python中一般为.pyc文件,在Java中则是.class文件了,这个字节码机器不能执行的
  3. 如果要执行字节码,则虚拟机上场了,这里需要强调一下,这个虚拟机不是vmware或者virtualbox的虚拟机概念,在Python中由虚拟机来执行这些字节码,在Java中同样是由JVM来实现,由于2中的字节码一般是不依赖于操作系统的,所以可以做到跨平台运行,也就是跨平台这件事,有虚拟机来搞定了

Python中的几种解释器

CPython

CPython是标准Python,也是其他Python编译器的参考实现。通常提到“Python”一词,都是指CPython。CPython由C编写,将Python源码编译成CPython字节码,由虚拟机解释执行。没有用到JIT等技术,垃圾回收方面采用的是引用计数。

Jython

Jython在JVM上实现的Python,由Java编写。Jython将Python源码编译成JVM字节码,由JVM执行对应的字节码。因此能很好的与JVM集成,比如利用JVM的垃圾回收和JIT,直接导入并调用JVM上其他语言编写的库和函数。

对于在Ubuntu上体验使用Jython的同学,可以按照以下步骤来进行

  1. 安装Jython环境 apt-get install jython
  2. 在命令行键入 jython,则可以进入命令行模式

两个实际例子说明:

  1. 引用标准Java库

    >>>from java.util import Date
    >>>d = Date()
    >>>print(d)
    Thu Dec 20 22:27:56 EST 2018
    
  2. 自定义Java库

    • 编辑HelloWorld.java文件
    package foo;
    public class HelloWorld {
    public void hello() {
      System.out.println("Hello World!");
    }
    public void hello(String name) {
      System.out.printf("Hello %s!", name);
    }
    }
    
    • 编译 javac HelloWorld.java
    • 将生成的HelloWorld.class放入foo目录下
    • 进入Jython环境,引入自定义包
    >>> from foo import HelloWorld
    >>> h = HelloWorld()
    >>> h.hello("TutorialsPoint")
    Hello TutorialsPoint!
    

IronPython IronPython与Jython类似,所不同的是IronPython在CLR上实现了Python,即面向.NET平台,由C#编写。IronPython将源码编译成TODO CLR,同样能很好的与.NET平台集成。即与Jython相同,可以利用.NET框架的JIT、垃圾回收等功能,能导入并调用.NET上其他语言编写的库和函数。IronPython默认使用Unicode字符串。

PyPy 这里说的PyPy是指使用RPython实现,利用Tracing JIT技术实现的Python,而不是RPython工具链。PyPy可以选择多种垃圾回收方式,如标记清除、标记压缩、分代等。相对于CPython,PyPy的性能提升非常明显,但对第三方模块的支持不够。比如无法很好的支持使用CPython的C API编写的扩展。

Python的优化

一般来说,受限于语言的特性,相比与Java,Python属于动态数据类型,也就是说存在于内存中的数据,并不是像Java那样一开始就是与类型强绑定的,这样也要求Python中的虚拟机要进行数据类型检查,也就消耗了性能。

优化的方式很多,可以考虑通过Cython来进行优化,来提升到接近C的性能,这个会在后面的章节中涉及。

小结

Python的解释器很多,但使用最广泛的还是CPython。如果要跨平台跨网络的话,小T老师建议还是通过REST或者RPC来实现,比较简单。

相关阅读


相关推荐
  1. 麻城市第五中学
  2. 佛山华粤学校
  3. Python基础 - requests以post方式发送json数据
  4. 种西瓜的小猪
  5. Putty登录安装在VirtualBox里的Linux服务器
  6. 宜兴市湖滨实验学校
  7. 天津市东丽区国际天才幼儿园华明分园 - 天津幼儿园黄页
  8. 百名网媒总编辑登上知音号欣赏武汉夜色
  9. Python公开课 - 标准库Thread详解
  10. 青岛中学
  11. 武汉一女子七天被骗220万
  12. 什么是TCP中三次握手和四次挥手
  13. Ubuntu 18.04下极验证geetest安装导入失败解决办法
  14. 蓝乔幼儿园 - 哈尔滨幼儿园黄页
  15. 明天我就变质了
  16. 湖南省常德市汉寿县东岳庙乡燕窝村小学
  17. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  18. 咸宁实验外国语学校小学部
  19. 河北省邢台市桥东区牛城双语幼儿园 - 邢台幼儿园黄页
  20. 江苏洪泽中学
  21. 涿州市星成幼儿园 - 保定幼儿园黄页
  22. 银座·英才金童格林幼儿园 - 唐山幼儿园黄页
  23. 南昌市第二十六中学
  24. 武汉女子网上做兼职被骗六十五万
  25. 安徽师范大学附属小学
  26. 北京市朝阳区金太阳幼儿园 - 北京幼儿园黄页
  27. 小鼠善善与狐狸先生
  28. 湖北将发放消费券 - 武汉新鲜事
  29. 贵州省贵阳市白云区中航标幼儿园 - 贵阳市幼儿园黄页
  30. 海盐县于城镇中心小学
  31. 奥迪客户不满加价,被武汉4S店销售群殴
  32. 武汉推出越王勾践剑交通卡
  33. 河北省唐山市博皓幼儿园 - 唐山幼儿园黄页
  34. Ads.txt是什么
  35. 上海市松江区仓桥学校
  36. Python公开课 - 数据抓取之Selenium使用(下)
  37. 荆轲刺秦王
  38. 客店老板偷金币
  39. 脱单!武汉的相亲角在哪你知道吗?
  40. 南京秦淮外国语学校
  41. 书香门第
  42. 天津市怡和中学
  43. 生木造屋
  44. ImageMagick给图像去噪
  45. 从吸血虫到针孔机器人
  46. 成都龙祥路小学
  47. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  48. 武汉动物园火烈鸟孔雀排队打疫苗
  49. 南宁市宾阳县蓝天幼儿园(顾明村卫生所西南) - 南宁幼儿园黄页
  50. 上海市金山区山阳中学
  51. 皇娥与启明星
  52. 老人和驴子
  53. Python公开课 - 爬虫之session和cookies
  54. 安丘市汶水小学
  55. 北外附属石家庄外国语学校
  56. 湛江市东升学校(中学部)
  57. 北京朝阳区劲松第一中学(劲松一中)
  58. 华童天使幼儿园 - 哈尔滨幼儿园黄页
  59. Javascript和Java的关系
  60. 佛山市顺德区杏坛逢简小学