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格式化css文件的方法
Mar 10 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
python简单操作excle的方法
Sep 12 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
Pandas实现一列数据分隔为两列
May 18 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
pytorch学习教程之自定义数据集
Nov 10 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调用Oracle存储过程的方法
2008/09/12 PHP
PHP array_multisort()函数的使用札记
2011/07/03 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python多线程分块读取文件
2019/08/29 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
中医专业应届生求职信
2013/11/17 职场文书
三年级小学生评语
2014/04/22 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
个人担保书范文
2014/05/20 职场文书
综艺节目策划方案
2014/06/13 职场文书
自我管理的活动方案
2014/08/25 职场文书
2015会计试用期工作总结
2014/12/12 职场文书