python属于编译型还是解释型的语言?python是哪一种类型的编译语言

Python先把代码编译成字节码,再对字节码解释执行。

java   编译型(请求次数多)+解释型(请求次数少)

解释性语言定义:

程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。

现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。

编译性语言定义:

编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

对比:

对编译型语言的定义:直接将原码编译为机器语言。

而python是先将原码编译为字节码,然后将字节码翻译为机器语言。 因此,python不属于编译型语言的范畴。

Python工作过程:

python 是解释型的编程语言。也可以把python脚本编译成pyc文件,不然编译后也是一种python虚拟指令,在python中运行。

Python先把代码编译成字节码,再对字节码解释执行。字节码在python虚拟机程序里对应的是PyCodeObject对象,pyc文件是字节码在磁盘上的表现形式。

pyc的创建时机是模块加载的时候,即import。

python test.py会对test.py进行编译成字节码并解释执行,但是不会生成test.pyc。

Java工作过程:

JAVA的第一道工序是javac编译,当然目标文件是BYTECODE(字节码)。后续可能有三种处理方式:

1. 运行时,BYTECODE由JVM逐条解释执行;

2. 运行时,部分代码可能由JIT翻译为目标机器指令(以method为翻译单位,还会保存起来,第二次执行就不用翻译了)直接执行;

3. RTSJ。继JAVAC之后执行AOT二次编译,生成静态的目标平台代码(典型的就是IBM WEBSHPERE REAL TIME)。

其实,现在用编译型、解释型来分类编程语言已经有点力不从心了。总体来讲,java的编译结果是被jvm“解释执行”的,所以这么说也能说通,而其实这个“是编译还是解释”这个概念在这里已经有点模糊了,理解它的过程就行了,不必下一个“精确”的定义;

而我自己仍然赞成“java是编译型语言”的说法,因为“编译”其本质就是“把一个相对高级的语言转换为另一个相对低级的语言”

字节码和机器码:

字节码和机器码(或者native code)的区别:

C代码被编译成机器码,将在处理器上直接执行。每一条指令控制CPU工作。

Java代码被编译成字节码,将在Java虚拟机(JVM)这个抽象的计算机上执行。每一条指令由JVM处理,JVM同计算机本身之间交互。

简而言之:机器码快的多,但字节码更易迁移,也更安全。

Java-JIT:

大家都知道本地机器码的速度比字节码的速度快很多。那么,如果我们能将一些字节码直接编译成本地机器码再去运行它会怎样呢?我们必须花费一些代价(比如时间)在编译字节码到本地机器码上,如果最终的运行时间更快,那么这个代价就是值得的。这就是JIT编译器的动机,一种混合了解释器和编译器好处的技术。简单来讲,JIT就是想通过编译技术提升脚本解释器系统的速度。

例如, 被JIT(及时编译)采用的通用方法:标识被经常执行的字节码;把其编译成本地的机器码;缓存该结果;当同样的的字节码再次被执行的时候,会取预编译的机器码,得到好处(例如速度提升)。

PyPy:

把JIT代入Python语言 (参看前面成果的附录).当然也有其他目的: PyPy 目标是成为一个跨平台,轻内存,支持stackless(译注:stackless为python提供微线程扩展,具有并发特性)。 但是及时编译才是它真正的卖点。 基于一系列时间测试的平均, 据说性能上能提高6.27倍。

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/11055.html

赞 (0)
江山如画的头像江山如画管理团队
精!教学成果奖申报书撰写要点(非常详细)
上一篇 2023年2月25日 下午3:34
如何保持每天精力充沛?
下一篇 2023年2月26日 下午8:42

99%的人还看了以下文章

  • MVC详解:模型(Model)-视图(View)-控制器(Controller)

    MVC(模型-视图-控制结构)是软件开发中常用的一种架构模式。它强制性的将输入、处理和输出分开。使应用程序被分成三个核心部件:模型 (Model)、视图(View)和控制(Controller)。它们各自处理自己的任务,有效地分离存储数据和展示数据功能模块以降低它们之间的耦合度。 MVC体系结构: 模型层主要负责保存和访问业务数据,执行业务逻辑和操作。这一层…

    2020年2月23日
    8.9K0
  • 基于jspSmartUpload的Jsp文件上传实例

    SmartUpload是一个免费的文件上传下载组件1、使用简单:仅三五行代码就可以搞定文件的上传2、方便存取:利用组件提供的对象,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等)。3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。 下载jsmartcom_zh_CN.jar文件:http://www.125j…

    2018年12月11日
    3.4K0
  • Pandas读取excel:Excel file format cannot be determined解决方法

    Pandas读取excel时报错,excel表格不能被指定,是什么原因? 这个问题我搞了很久,最后终于搞明白了,网上各种什么utf-8呀,格式化或者另存都不行,我都试过了。 Excel file format cannot be determined解决方法 首先要确定excel已经放在项目目录下,路径是正确的。 一、然后确保安装了所需要的模块 pip in…

    2022年9月11日
    23.0K0
  • python 字典的使用案例二:求平均分,并按平均分由高到低输出选手编号和最后得分

    校园好声音大赛,三位选手得分,由8位评委给出。 请根据评分表,将每们选手的得分去掉一个最高分和一个最低分后求平均分,并按照平均分由高到低输出选手编号和最后得分。 dicScores = {‘012’: [90, 94, 97, 86, 85, 89, 88, 85], ‘005’: [91, 91, 92, 98, 90, 96, 90, 95], ‘108…

    2020年1月22日
    23.2K0
  • js中var a=b=1和var a=1,b=1的区别

    js中一次性定义多个变量的时候,可以用:var a=1,b=1这种中间用逗号隔开的方式,但有些时候为了省事,直接定义var a=b=1。 那这两种写法方式最后效果是一样的吗?有没有什么区别呢?请大家看下面的范例: 1、用var a=b=1的方式 由上图可以明显看出来,变量b的作用域已经是全局的了,因为在函数外可以调用到(可以正常的输出变量)。 2、用var …

    2022年3月19日
    7.6K0
  • myeclipse注册方法(在哪输入注册码?)

    知道了myeclipse注册码,在哪里输入? Subscriber:AdministratorSubscription Code:NLR8ZC-855550-68537056870845987 运行myeclipse  依次打开window—-preferences—-MyEclipse Enterprise Workbench&#8…

    2020年2月23日
    5.9K0

发表回复

登录后才能评论