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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
python远程连接服务器MySQL数据库
Jul 02 Python
详解Python 切片语法
Jun 10 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
Python  word实现读取及导出代码解析
Jul 09 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
杏林同学录(五)
2006/10/09 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
javascript全局变量封装模块实现代码
2012/11/28 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
Python实现的石头剪子布代码分享
2014/08/22 Python
python实现多线程网页下载器
2018/04/15 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
橄榄树药房:OLIVEDA
2019/09/01 全球购物
梅花魂教学反思
2014/04/25 职场文书
合作协议书模板
2014/10/10 职场文书
2014年工人工作总结
2014/11/25 职场文书
先进班组材料范文
2014/12/25 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
Python实现批量自动整理文件
2022/03/16 Python
pandas进行数据输入和输出的方法详解
2022/03/23 Python