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之模块的加载
Oct 24 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python编程之event对象的用法实例分析
Mar 23 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
Python全排列操作实例分析
Jul 24 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
pandas的排序和排名的具体使用
Jul 31 Python
Python读取YAML文件过程详解
Dec 30 Python
python如何实现单链表的反转
Feb 10 Python
如何基于python实现不邻接植花
May 01 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Python中logging日志的四个等级和使用
Nov 17 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实现动态柱状图改进版
2015/03/30 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
jquery 插件学习(一)
2012/08/06 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
Python文件及目录操作实例详解
2015/06/04 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
基于python的Paxos算法实现
2019/07/03 Python
简单了解python的break、continue、pass
2019/07/08 Python
python实现图片上添加图片
2019/11/26 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
提高python代码运行效率的一些建议
2020/09/29 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
企业门卫岗位职责
2013/12/12 职场文书
电子银行营销方案
2014/02/22 职场文书
学习心理学的体会
2014/11/07 职场文书
见义勇为事迹材料
2014/12/24 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技