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%的人还看了以下文章

  • 精!HTML5调用手机拍照实现图片上传服务器,并将图片地址存进数据库(上)

    这篇文章主要为大家详细介绍了HTML5+Canvas+jquery技术,调用手机拍照功能实现图片上传。 不懂原理的新手,可以先学习:超清晰!HTML5 实现手机拍照上传功能原理讲解 上传页面用到了HTML5的file文件上传功能,再配合canvas。 实现流程 首先在前端把图片进行压缩,因为手机的不同,可能有的手机拍照给力,像素高,拍出来的图片的大小就相对大…

    2022年8月11日
    1.2K0
  • HTTP错误 403.14 服务器配置为不列出此目录内容

    开发一个企业网站,使用ASP技术,在本地通过IIS管理器调试,出现 如下问题: HTTP 错误 403.14 – Forbidden Web 服务器被配置为不列出此目录的内容 解决方法: 在”功能视图“,中找到”目录浏览“,双击进入 在目录浏览右侧操作中选择”启用“! 这时再浏览网站,可以看到已经不报错了,但是网站是以文件目录的形式展现的! 这是…

    2018年7月3日 编程开发
    3.1K0
  • 一个完整的servlet验证登录用户名和密码实例

    servlet验证登录用户名和密码实例项目结构 登录页面login.html servlet验证通过后,欢迎页面 登录页面login.html: <body> <form action=”LoginCheck” method=”post”> 用户名:<input type=”text” name=”username” />…

    2020年12月6日
    2.4K0
  • Python开发环境搭建

    今天学习在计算机上配置Python开发环境。 虽然使用Python自带的Vim编辑器+命令行的方式比较酷,然而一个优秀的IDE确实能让开发速度提升不少。 Python开发环境一在Eclipse中搭建Python开发环境 基本软件需求:1. Eclipse(https://www.eclipse.org/downloads/)2. Python解释器(www.…

    2019年3月15日
    6.6K1
  • JSP分页思想—核心代码

    try{condition=”select * from employee_info”; sql=conn.createStatement(); rs=sql.executeQuery(condition); int intPageSize; //一页显示的记录数 int intRowCount; //记录总数 int intPageCount; //总页数…

    2019年10月30日
    2.2K0
  • 编写第一个Python程序——输出HelloWorld并运行

    上一章节我们讲解了Python开发环境搭建,今天学习使用 Eclipse编写第一个Python程序——输出HelloWorld并运行。 1.打开Eclipse,选择File——》New——》Other。在弹出的New窗口中,选择Pydev——》Pydev Project——》next。 2.在弹出的窗口中,依次填写Project name(工程名)——》Di…

    2019年6月24日 编程开发
    3.7K0

发表回复

登录后才能评论