摘要 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。由于翻译方式的不同,习惯上我们大致把高级语言分为两类,即编译型语言和解释型语言。对于这两种类型的编程语言,很多人在理解层面上存在盲点,本文将对这两种类型的编程语言进行探讨,帮助读者更好的理解这一问题。

文章概览

编译型语言和解释型语言

基本解释

优缺点

python

python解释器

python代码执行过程

编译型语言和解释型语言

基本解释

对于编译型语言,我们以C语言为例,C语言在执行过程中,先要将源程序编译为目标文件(机器代码),该目标文件是与平台相关的,也就是说ARM生成的目标文件,不能被用于MIPS的CPU,也不能用于x86的CPU。目标文件经过连接操作就可以生成可执行文件,以后我们想再次运行这段代码时,不必进行编译操作,只需要直接执行生成的可执行文件即可。

对于解释型语言呢,我们不需要执行编译过程,程序在执行时直接由解释器逐句地对程序进行解释,转换为机器可以执行的代码。但是对于有些解释型语言来说,也需要进行编译操作,比如Java。Java程序在执行过程中先要将源代码编译成字节码文件,然后再由解释器对字节码文件逐句进行解释,所以说Java是一种先编译后解释的语言。(注:Java为了实现跨平台的特性,专门在从高级语言代码转换至机器码过程的中间加入了一层中间层JVM(java虚拟机),Java首先依赖编译器将代码(.java)编译成JVM能识别的字节码文件(.class),然后由JVM解释并执行该字节码,也可结合JIT(just-in-time compilation即时编译)技术,将解释生成的机器码转换为更高效的本地机器码,且该机器码可被缓存,来提高重复执行的效率。)

常见的编译型语言包括:C/C++、Pascal等,常见的编译型语言包括:Java、JavaScript、VBScript、Perl、Ruby、MATLAB 等。

优缺点

编译型语言可以做到一次编译,多次运行,执行效率比较高;而解释型语言在每次执行时都需要解释器进行解释,执行效率较低(但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言)。

编译型语言的执行依赖于平台,生成的可执行文件不能运行在其他平台,需重新编译,跨平台的性较差;而解释型语言的执行依赖于解释器,各个平台都有相应的解释器,解释器会将程序解释成基于当前机器指令集的机器码并执行,所以解释型语言可以很好的移植到其他平台,具有很好的跨平台性。

编译型语言,在编译阶段即可发现常见的语法或者链接等错误,此机制可在运行前帮助程序员排查出可能潜在的语法、语义和类型转换错误,编译型语言一般都有明确的变量类型检测,也被称作强类型语言,即编译型语言至少能确保所生成的可执行文件肯定是可运行的,至于执行的逻辑不对则属于程序员业务逻辑错误范畴了。而对于解释型语言,代码中的错误必须直到运行阶段方可发现,由此造成的困惑是:往往一段程序看不出问题但却在运行阶段错误连连且需要一个个排查:变量拼写错误、方法不存在等。但也正是基于解释是在运行期执行转化的特性,一般的解释型语言通常都有自己的shell,可以在不确定某些执行结果时立即“动手执行”试一下,这就比每次都需要编译后才能运行并看到结果省去不少时间。

python

通过上面对编译型语言和解释型语言的分析,我们可以得出结论,python是属于解释型语言的一种。python类似于Java,为了效率上的考虑,也提供了编译方式,编译后生成的也是字节码的文件形式,并由Python的的VM(虚拟机)的去执行。不同点在于,Python的编译并非强制执行的操作,确切来说Python的编译是自动的,通常发生在对某个模块(module)的调用过程中,编译成字节码的可以节省加载模块的时间,以此达到提高效率的目的。可见,某些先进的高级语言在对编译和解释方面的拿捏舍去,都采取了一种:两手抓,两手都要硬的态度。

python解释器

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器

CPython: 这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器,它是使用最广的Python解释器.

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

python代码执行过程

参考这篇博客和这篇博客

python语言是解释型语言-解释型语言python相关推荐

  1. python语言程序设计是什么,python语言程序设计教程

    python语言程序设计是什么 Python是一种跨平台的计算机程序设计语言. 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 最初被设计用于编写自动化脚本(shell),随着版本的 ...

  2. python语言程序设计嵩天-Python语言程序设计基础(第2版)嵩天课后答案

    嵩天.礼欣.黄天羽Python语言程序设计基础(第2版)习题答案本书提出了以理解和运用计算生态为目标的Python语言教学思想,在系统讲解Python语言语法的同时介绍了从数据理解到图像处理的14个P ...

  3. 如何自学python语言-我是如何学习Python语言?

    我喜欢学习新的东西,包括工具,算法,技巧等.一来是帮助我更好地解决问题,二来学习的进程令我愉悦. 我是一位数据工作者,经常会使用到各种软件和工具帮助我解决各种数据问题,比方说数据的抽取与解析,数据的加 ...

  4. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)

    Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录

  5. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  6. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  7. Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

    Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...

  8. Python语言学习:解决python版本升级问题集合(python2系列→Python3系列)导致错误的总结集合

    Python语言学习:解决python版本升级问题集合(python2系列→Python3系列)导致错误的总结集合 目录 Python版本升级的原因 Text and binary data in P ...

  9. python语言的主网址-python官方网站

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 由于整个python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人 ...

  10. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略

    Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...

最新文章

  1. Java常用排序算法/程序员必须掌握的8大排序算法
  2. 纯键盘操作,玩转资源管理器
  3. React 和 Vue的特点
  4. 使用RestTemplate消费Hybris User API获取指定用户的信息
  5. java自己实现ioc_springioc原理、springmvc项目分析、自己实现IOC
  6. 初学者css常见问题_5分钟内学习CSS-初学者教程
  7. QT5_数据类型转化
  8. 虚方法和重写方法的继承特性
  9. qt调用import sys库_【开源库】使用Qt.py进行开发
  10. Android个人日常消费理财_财务软件
  11. 虚拟变量陷阱原理及算例
  12. ubuntu 19.04 修改登陆界面背景
  13. 联想小新22H2版跳过联网方法最新方法
  14. c++2048小游戏编写
  15. 胖AP和瘦AP区别组网优缺点
  16. 04 关于OSPF的环回口
  17. 百度地图api不支持windows平板 双指放大缩小解决方案
  18. 《一起来看流星雨》剧情简介
  19. 大数据技术之DataX (一)DataX插件开发
  20. 年后购机好时节 联想打印超级品牌日登陆

热门文章

  1. 动手组装一台 macbook pro 15寸(a1398模具,rmbp mjlq2/mjlt2)
  2. python pip 查看一个package的所有版本
  3. spring之AOP切面不生效!!!!!原因在这
  4. mmdetection学习系列(1)——SSD网络
  5. Vue 源码解读 起步(二)
  6. 用迭代法求Daubechies小波的尺度函数
  7. word的表格怎么转化成html,从WORD表格换成html.doc
  8. 离线安装MySQL缺少libaio.so.1文件——并离线安装libaio.so.1
  9. python调用PHP方法
  10. 使用Kafka订阅数据库的实时Binlog