python属于解释语言吗


Posted in Python onJune 11, 2020

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 相关文章推荐
在Django框架中编写Context处理器的方法
Jul 20 Python
深入理解Django的自定义过滤器
Oct 17 Python
python机器学习之神经网络(一)
Dec 20 Python
Python3爬虫学习入门教程
Dec 11 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
在python里从协程返回一个值的示例
Feb 19 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 Python
numpy的Fancy Indexing和array比较详解
Jun 11 #Python
python如何更新包
Jun 11 #Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 #Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 #Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 #Python
python中什么是面向对象
Jun 11 #Python
python实现凯撒密码、凯撒加解密算法
Jun 11 #Python
You might like
CI框架给视图添加动态数据
2014/12/01 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
python中uuid模块实例浅析
2020/12/29 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
python asyncio 协程库的使用
2021/01/21 Python
佳能法国商店:Canon法国
2019/02/14 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
临床医学专业个人的自我评价
2013/09/27 职场文书
教师节促销方案
2014/03/22 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
单位作风建设自查报告
2014/10/23 职场文书
画展观后感
2015/06/17 职场文书
昆虫记读书笔记
2015/06/26 职场文书