python程序需要编译吗


Posted in Python onJune 19, 2020

Python是编译型语言还是解释型语言?回答这个问题前,应该先弄清楚什么是编译型语言,什么是解释型语言。

所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下次运行时无需重新编译。

不过它是针对特定CPU体系的,这些目标代码只能在特定平台执行,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新编译。

它不具备可移植性,但是执行速度快,C、C++这类语言属于编译型语言。

而解释型语言是在代码运行期间逐行翻译成目标机器码,下次执行时,还是需要逐行解释,我们可以简单认为 Java、Python 都是解释型语言。

编译型相当于厨师直接做好一桌子菜,顾客来了直接开吃,而解释型就像吃火锅,厨师把菜洗好,顾客需要自己动手边煮边吃。

效率上来说解释型语言自然比不过编译型语言,当然也不是绝对了,像 JIT 的效率就很高。

以上是对编译型语言和解释型语言的一个简单粗暴的区分,但是 Python(这里主要是指CPython)并不是严格的解释型语言;

因为 Python 代码在运行前,会先编译(翻译)成中间代码,每个 .py 文件将被换转成 .pyc 文件,.pyc 就是一种字节码文件,它是与平台无关的中间代码,不管你放在 Windows 还是 Linux 平台都可以执行,运行时将由虚拟机逐行把字节码翻译成目标代码。

我们安装Python 时候,会有一个 Python.exe 文件,它就是 Python 解释器,你写的每一行 Python 代码都是由它负责执行,解释器由一个编译器和一个虚拟机构成,编译器负责将源代码转换成字节码文件,而虚拟机负责执行字节码,所以,解释型语言其实也有编译过程,只不过这个编译过程并不是直接生成目标代码,而是中间代码(字节码),然后再通过虚拟机来逐行解释执行字节码。

总结

Python代码首先会编程一个字节码文件,再由虚拟机逐行解释,把每一行字节码代码翻译成目标指令给CPU执行。

知识点扩展:

基于python的字节编译

定义:

把模块定义成二进制语言程序的这个过程叫做字节编译

python是解释型语言,它的字节编译是由解释器完成的

编译py文件,生成pyc结尾的文件的方法,

Import zipfile.py

到此这篇关于python程序需要编译吗的文章就介绍到这了,更多相关python程序用编译么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
Python字符串逐字符或逐词反转方法
May 21 Python
使用python实现个性化词云的方法
Jun 16 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
python实现比较文件内容异同
Jun 22 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
python实现逐个读取txt字符并修改
Dec 24 Python
对python中Json与object转化的方法详解
Dec 31 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
pycharm 对代码做静态检查操作
Jun 09 Python
python中round函数如何使用
Jun 19 #Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 #Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 #Python
python中怎么表示空值
Jun 19 #Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 #Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 #Python
为什么python比较流行
Jun 19 #Python
You might like
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
使用Python生成XML的方法实例
2017/03/21 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python在文本开头插入一行的实例
2018/05/02 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
Python必须了解的35个关键词
2020/07/16 Python
python爬虫用mongodb的理由
2020/07/28 Python
戴尔美国官网:Dell
2016/08/31 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
2014财务年度工作总结
2014/11/11 职场文书
订货会邀请函
2015/01/31 职场文书