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快速排序代码实例
Nov 21 Python
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python中atexit模块的基本使用示例
Jul 08 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
python 美化输出信息的实例
Oct 15 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
Python访问Redis的详细操作
Jun 26 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中的错误处理、异常处理机制分析
2012/05/07 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP进程通信基础之信号
2017/02/19 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
Nodejs处理异常操作示例
2018/12/25 NodeJs
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python3 socket同步通信简单示例
2017/06/07 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python 错误处理 assert详解
2020/04/20 Python
详解python logging日志传输
2020/07/01 Python
谈谈python垃圾回收机制
2020/09/27 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
电影雨中的树观后感
2015/06/15 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android