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 相关文章推荐
Python写的一个简单DNS服务器实例
Jun 04 Python
python字典键值对的添加和遍历方法
Sep 11 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
Python使用正则实现计算字符串算式
Dec 29 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
Django websocket原理及功能实现代码
Nov 14 Python
Python修改DBF文件指定列
Dec 19 Python
OpenCV-Python实现油画效果的实例
Jun 08 Python
Python+tkinter实现高清图片保存
Mar 13 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
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
做网页的一些技巧
2007/02/01 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
办公室保洁员岗位职责
2013/12/02 职场文书
房地产促销活动方案
2014/03/01 职场文书
授权委托书样本
2014/04/03 职场文书
规范化管理年活动总结
2014/08/29 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
Python面向对象编程之类的概念
2021/11/01 Python
详解pytorch创建tensor函数
2022/03/22 Python