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之通过Python连接数据库
Oct 28 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python键盘输入转换为列表的实例
Jun 23 Python
Python动态语言与鸭子类型详解
Jul 01 Python
解决yum对python依赖版本问题
Jul 05 Python
python解析命令行参数的三种方法详解
Nov 29 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
Python 中面向接口编程
May 20 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
数据库的日期格式转换
2006/10/09 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
动态样式类封装JS代码
2009/09/02 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
python实现在目录中查找指定文件的方法
2014/11/11 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Python中获取对象信息的方法
2015/04/27 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
平面设计求职信
2014/03/10 职场文书
文明村镇申报材料
2014/05/06 职场文书
在校生证明
2015/06/17 职场文书
丧事主持词
2015/07/02 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Python Pandas 删除列操作
2022/03/16 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
python Tkinter模块使用方法详解
2022/04/07 Python