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 相关文章推荐
python中关于日期时间处理的问答集锦
Mar 08 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
利用python程序生成word和PDF文档的方法
Feb 14 Python
对python requests的content和text方法的区别详解
Oct 11 Python
详解python Todo清单实战
Nov 01 Python
简单了解django orm中介模型
Jul 30 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
python多进程间通信代码实例
Sep 30 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Pycharm连接远程服务器过程图解
Apr 30 Python
Django migrate报错的解决方案
May 20 Python
Python Django模型详解
Oct 05 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php cli换行示例
2014/04/22 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
python安装以及IDE的配置教程
2015/04/29 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
python Web开发你要理解的WSGI & uwsgi详解
2018/08/01 Python
Python正则表达式如何匹配中文
2020/05/27 Python
python如何建立全零数组
2020/07/19 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
小学优秀辅导员事迹材料
2014/05/11 职场文书
合作经营协议书范本
2014/09/16 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
合作协议书范本
2014/10/25 职场文书
药店收银员岗位职责
2015/04/07 职场文书
医院见习总结
2015/06/24 职场文书
运动会致辞稿
2015/07/29 职场文书
2015年教师节广播稿
2015/08/19 职场文书
导游词之江西赣州
2019/10/15 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
Python中json.dumps()函数的使用解析
2021/05/17 Python
i7 6700处理器相当于i5几代
2022/04/19 数码科技