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+Django在windows下的开发环境配置图解
Nov 11 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
python win32 简单操作方法
May 25 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
基于python if 判断选择结构的实例详解
May 06 Python
python 随机森林算法及其优化详解
Jul 11 Python
centos7之Python3.74安装教程
Aug 15 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
Python中bisect的使用方法
Dec 31 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 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中截取中文字符串的代码小结
2011/07/17 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
JavaScript的一些小技巧分享
2021/01/06 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
python中操作文件的模块的方法总结
2021/02/04 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
请客吃饭开场白
2015/06/01 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android