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创建xml的方法
Mar 10 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
python 字符串和整数的转换方法
Jun 25 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
Python实现Word文档转换Markdown的示例
Dec 22 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中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
深入理解python对json的操作总结
2017/01/05 Python
pandas实现选取特定索引的行
2018/04/20 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python+os根据文件名自动生成文本
2019/03/21 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
django中嵌套的try-except实例
2020/05/21 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
出纳会计岗位职责
2014/03/12 职场文书
机关搬迁方案
2014/05/18 职场文书
会计求职信范文
2014/05/24 职场文书
结对共建工作方案
2014/06/02 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
vue递归实现树形组件
2022/07/15 Vue.js