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获取beautifulphoto随机某图片代码实例
Dec 18 Python
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
django 2.0更新的10条注意事项总结
Jan 05 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
Numpy数组的广播机制的实现
Nov 03 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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
PHP基本语法总结
2014/09/06 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
python如何实现复制目录到指定目录
2020/02/13 Python
python 模拟登录B站的示例代码
2020/12/15 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
加拿大探亲邀请信
2014/01/28 职场文书
人事部经理岗位职责
2014/03/07 职场文书
网络宣传方案
2014/03/15 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
贪污检举信范文
2015/03/02 职场文书
建党伟业的观后感
2015/06/01 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang