python虚拟机解释器及运行过程

 更新时间:2022年06月02日 17:02:53   作者:把苹果咬哭的测试笔记  
这篇文章主要为大家介绍了python虚拟机解释器及运行过程的介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

python虚拟机解释器

我闲来翻了翻几年前就买的一本python的书,O'REILLY的【python学习手册】,中译版,很厚。

可惜,我看得非常少,这也是为什么我在简历上关于python顶天也就写个熟悉,就这都担心找虐。虽说java的学习价值更大,但是学了平时用不上,忘得快。再加上做题的时候,感觉还是用python来得更得心应手些(废话,别的你也不熟啊),于是我决定把书看完,记录出以前不知道的,或者忽视掉的知识细节。

什么是python解释器

1. 解释性语言和编译性语言

说到解释器,大家之前多少都听过解释性语言和编译性语言。首先,不管是这二位其中的谁,源代码对于计算机来说,都是读不懂的,计算机只认识二进制指令。所以,想让程序被执行,那么自然要先把源代码转化为二进制指令,也就是机器码。

那么,在什么时候进行转换呢?

有的语言要求必须提前把代码一次性转换完毕,这种就是编译型语言,用的转换工具就叫编译器,比如C语言、C++。有的语言则可以一边执行一边转化,用到哪里了就转哪里,这种就是解释性语言,用的转化工具叫解释器,比如python、javascript。

java比较特殊,既有编译又有解释。但是编译并没有直接编译成机器码,而是编译成字节码,然后再拿到虚拟机中执行。这种设计初衷是在跨平台的同时兼顾执行效率,这里就不展开了。

ok,上面就是铺垫了。

2. python解释器

python解释器是一种让其他程序运行起来的程序,编写的python代码必须在解释器中运行,这东东已经在我们安装python的时候都装上了。
所以,现在我print(hello world),就可以运行了,控制台可以看到文本的输出。

3. python程序运行过程

上面的一行代码虽然简单,但是python运行它还是经过了两步操作:

将源代码编译成为“字节码”转发“字节码”到“虚拟机”

字节码编译

可以理解为翻译,把print(hello world)翻译成字节码,字节码会保存在后缀名是.pyc的文件里,这文件其实就是编译后的.py源代码。

这些字节码相较于源代码,运行起来速度要快得多。为什么?

因为在下一次运行程序时,如果在上次保存了字节码之后没有修改过源代码了,Python就会加载.pyc文件并且跳过编译这个步骤。

当必须要重新编译时,python会自动检查源文件和字节码文件的时间戳,如果你又保存了源代码,下次程序运行时,字节码将自动重新创建。

python虚拟机

Python Virtual Machine,简写为PVM,当有字节码文件之后,就会被发送到PVM里来执行。

这里注意,PVM并不是指的一个独立的程序,是不需要安装的。可以把PVM理解为Python的运行引擎,是一个迭代运行字节码指令的大循环,一个个的完成操作,直到结束。
从技术角度看,PVM才是“解释器”的最后一步。

关于python的性能

大家都知道,python的缺点是运行慢。但其实这里的慢也只是相对而言,跟C和C++这类编译性语言相比,确实执行速度还不够快。

为什么?

上述也提到了python会把源代码转成字节码,然后再将字节码解释出来。但是为了更好的跨平台性,这里的字节码是一种跟平台无关的格式,所以并不是底层的二进制代码。到目前为止,只要不是对运行速度有严苛要求的领域,比如数值计算或动画这种,经常需要核心处理单元至少以C语言的速度执行,绝大多数的应用,python还是可以胜任的。

相比于缺点,python带来开发效率的提升,相信也是很多人喜爱的的重要因素。

以上就是python虚拟机解释器及运行过程的详细内容,更多关于python虚拟机解释器的资料请关注脚本之家其它相关文章!

相关文章

  • python、Matlab求定积分的实现

    python、Matlab求定积分的实现

    今天小编就为大家分享一篇python、Matlab求定积分的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python3 requests 各种发送方式详解

    python3 requests 各种发送方式详解

    这篇文章主要介绍了python3 requests 各种发送方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Jupyter notebook如何修改平台字体

    Jupyter notebook如何修改平台字体

    这篇文章主要介绍了Jupyter notebook如何修改平台字体,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 详解python中的线程与线程池

    详解python中的线程与线程池

    这篇文章主要介绍了python线程与线程池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python 对图片进行简单的处理

    python 对图片进行简单的处理

    介绍一些图片处理的Python代码,有了这些处理代码,我们可以很方便的处理一些图片,Python这里处理图片一般都使用Pillow包,有此需求的朋友可以参考下
    2021-06-06
  • 利用PyCharm Profile分析异步爬虫效率详解

    利用PyCharm Profile分析异步爬虫效率详解

    这篇文章主要给大家介绍了关于如何利用PyCharm Profile分析异步爬虫效率的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PyCharm具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • python中的脚本性能分析

    python中的脚本性能分析

    这篇文章主要介绍了python中的脚本性能分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • pytest中配置文件pytest.ini使用

    pytest中配置文件pytest.ini使用

    本文主要介绍了pytest中配置文件pytest.ini使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Python学习之面向函数转面向对象详解

    Python学习之面向函数转面向对象详解

    本文将针对类进行一个综合练习,利用所学的面向对象编程、类的知识将我们之前做的面向函数编写的学生信息库重构为面向对象的方式,感兴趣的可以了解一下
    2022-03-03
  • python中利用h5py模块读取h5文件中的主键方法

    python中利用h5py模块读取h5文件中的主键方法

    今天小编就为大家分享一篇python中利用h5py模块读取h5文件中的主键方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论