Python是一门解释型语言?

Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。

如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。 python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载

解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上接近编译型语言,而不能超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,先对.pyc文件和.py文件的最近一次的修改时间进行判断,如果.pyc文件的修改时间晚于.py文件,说明.py文件中的源代码未修改过,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

知识点补充:

其实了解Python程序的执行过程对于大部分程序员,包括Python程序员来说意义都是不大的,那么真正有意义的是,我们可以从Python的解释器的做法上学到什么,我认为有这样的几点:

A. 其实Python是否保存成pyc文件和我们在设计缓存系统时是一样的,我们可以仔细想想,到底什么是值得扔在缓存里的,什么是不值得扔在缓存里的。

B. 在跑一个耗时的Python脚本时,我们如何能够稍微压榨一些程序的运行时间,就是将模块从主模块分开。(虽然往往这都不是瓶颈)

C. 在设计一个软件系统时,重用和非重用的东西是不是也应该分开来对待,这是软件设计原则的重要部分。

D. 在设计缓存系统(或者其他系统)时,我们如何来避免程序的过期,其实Python的解释器也为我们提供了一个特别常见而且有效的解决方案。

到此这篇关于python属于解释语言吗的文章就介绍到这了,更多相关python是解释语言吗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python语言属于-python属于解释语言吗相关推荐

  1. python面试常见问题-Python面试中常见的40个问题

    1)什么是Python?使用Python有什么好处? Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理.Python的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个 ...

  2. python怎么解释语言_python属于解释语言吗

    Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. 如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写 ...

  3. python是一种语言吗-Python是一种什么样的编程语言?解释?编译?汇编?机械?...

    作为一名技术专家和软件工程师,新技术和语言地持续探索必不可少,笔者将从现在带大家开启"Python"的世界.如果你刚好从事面向对象开发,那么不妨给Python一个机会.在循序渐进地 ...

  4. python怎么解释语言_python——解释型语言

    编程语言分三大类 : 低级语言 . 汇编语言 . 高级语言. 现代计算机都是基于 图灵机模型 制造的. 因此计算机的内部只能接受二进制数据.而用二进制代码 0 1 描述的指令叫做机器指令,被称作机器语 ...

  5. python属于哪种类型的语言_Python是什么类型的编程语言,有什么特性

    由于近几年人工智能的不断发展,Python也跟着火了,因为Python是深度学习技术的主流应用编程语言.同时它的应用场景很多,被称为"胶水语言".下面给大家科普一下Python这门 ...

  6. rust python扩展_Rust语言优化Python性能案例

    原标题:Rust语言优化Python性能案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一些性能问题,不过 Sentry 工程师分享的在关键模块上用另外一门语言 Rust ...

  7. 56岁潘石屹下定决心学Python,60多岁程序语言之父们还在敲代码,你还敢懈怠吗?...

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 比你成功的人,比你还努力. 上周,SOHO中国董事长.地产大亨潘石屹,56岁生日当天发布微博宣布进军编程语言Python. 紧接着第二天,又 ...

  8. python程序设计语言是什么类型的语言-Python 是弱类型的语言 强类型和弱类型的语言区别...

    Python 是弱类型的语言 在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言.C++.Java 是强类型语言的代表. 下面我们以 C++ 为例来演示强类型语 ...

  9. python语言基础-Python语言基础01-初识Python

    1. Python简介 1.1 Python的历史 Python的创始人为吉多·范罗苏姆(荷兰语:Guido van Rossum) 1989年的圣诞节期间:吉多·范罗苏姆为了在阿姆斯特丹打发时间,决 ...

最新文章

  1. 如何成为一名专家级的开发人员
  2. dubbo mysql_dubbo系列(四) 凑一下热闹 使用dubbo redis mybatis mysql 实现商品秒杀功能...
  3. Golang时间格式化
  4. PCM(脉冲编码调制)、iLBC编解码、opus(声音编码格式)、VP8视频压缩格式、H.264数字视频压缩格式
  5. k8s核心技术-配置管理_ConfigMap---K8S_Google工作笔记0037
  6. Git 经常使用命令合集
  7. Linux的高效传输函数sendfile
  8. [转载] Java7中增加的新特性
  9. JavaScript开发者的工具箱
  10. 如何使用一套键盘鼠标,同时控制多台电脑?
  11. 编译原理第二版5.1答案
  12. word怎么恢复保存前的文件,word文件恢复
  13. visual studio 版本的区别
  14. 聚沙成塔——VBA术语 (VBA Glossary)
  15. 2021年浙大考研计算机专业录取分数线,浙江大学2021年计算机考研拟录取数据分析...
  16. Jvectormap中文帮助文档(API)
  17. 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分
  18. python版openvino使用
  19. G - 阿牛的EOF牛肉串
  20. alarm()闹钟函数

热门文章

  1. CentOS7、REHL7的firewalld防火墙使用简单说明
  2. C#中equal与==的区别
  3. document,element,node方法
  4. java通过System.getProperty获取系统属性
  5. Mongodb的Replica Sets + Sharding架构
  6. iPhone4S出现应用无法打开时的解决方案
  7. 作者赠送的《我的第一本c++书》收到啦
  8. 下列关于python的说法中、正确的是-以下关于 Python版本的说法中,哪个是正确的?...
  9. python画树叶-如何理解python一行代码实现一个爱心字符画?
  10. python下载教程3.7-Python3