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实现redis三种cas事务操作
Dec 19 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
python发送邮件脚本
May 22 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python移位运算的实现
Jul 15 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
基于python读取.mat文件并取出信息
Dec 16 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
Python中的Cookie模块如何使用
Jun 04 Python
Python 使用双重循环打印图形菱形操作
Aug 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
python正则分组的应用
2013/11/10 Python
python2.7实现爬虫网页数据
2018/05/25 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
Java的for语句中break, continue和return的区别
2013/12/19 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
生物制药专业求职信
2014/03/11 职场文书
防卫过当辩护词
2015/05/21 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
MySQL 覆盖索引的优点
2021/05/19 MySQL
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript