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搭建简易服务器分析与实现
Dec 15 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
使用Python对Csv文件操作实例代码
May 12 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
python筛选出两个文件中重复行的方法
May 31 Python
python远程邮件控制电脑升级版
May 23 Python
python实现横向拼接图片
Mar 23 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
python如何利用Mitmproxy抓包
Oct 10 Python
Python实现小黑屋游戏的完整实例
Jan 06 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中extract()函数的定义和用法
2012/08/17 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
python logging模块的使用
2020/09/07 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
销售业务实习自我鉴定
2013/09/23 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
电大本科自我鉴定
2014/02/05 职场文书
公司管理建议书范文
2014/03/12 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
大学生自我鉴定书
2014/03/24 职场文书
欢迎领导标语
2014/06/27 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
八达岭长城导游词
2015/01/30 职场文书
辞职信的写法
2015/02/27 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
nginx 配置指令之location使用详解
2022/05/25 Servers
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS