首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python是被解释还是编译的?

问Python是被解释还是编译的?
EN

Software Engineering用户
提问于 2010-12-08 07:28:37
回答 5查看 150.5K关注 0票数 82

这只是我在阅读有关解释语言和编译语言时的一个疑问。

Ruby无疑是一种解释语言,因为源代码是由解释器在执行时处理的。

相反,C是一种编译语言,因为我们必须先根据机器编译源代码,然后再执行。这样的结果执行起来要快得多。

现在来看Python:

  • 导入python代码(somefile.py)时,会在同一个目录中创建一个文件(somefile.pyc)。假设导入是在python或django模块中完成的。导入之后,我稍微修改代码并再次执行导入的函数,以发现它仍然在运行旧代码。这表明*.pyc文件是编译后的python文件,类似于编译C文件后创建的可执行文件,尽管我不能直接执行*.pyc文件。
  • 当python文件( somefile.py )直接执行( ./somefile.py或python somefile.py)时,不会创建任何.pyc文件,代码将按指示解释行为的方式执行。

这表明,每次在新进程中导入python代码以创建.pyc时,都会编译它,而直接执行时则会对其进行解释。

那我应该把它当作哪种语言呢?解释还是编译?与解释和编译语言相比,它的效率如何?

根据维基的口译语言页面,它被列为一种被编译成虚拟机代码的语言,这是什么意思?

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2010-12-08 14:39:48

值得注意的是,语言不是被解释或编译的,而是语言实现要么解释要么编译代码。您注意到Ruby是一种“解释语言”,但是您可以编译Rubyàla MacRuby,所以它并不总是一种解释语言。

几乎每个Python实现都由一个解释器(而不是编译器)组成。您看到的.pyc文件是Python虚拟机的字节代码(类似于.class文件)。它们与C编译器为本机架构生成的机器代码不一样。然而,有些Python实现是由一个即时编译器组成的,它将把Python字节代码编译成本机代码。

(我说“几乎每一个”,因为我不知道有任何用于Python的本机编译器,但我不想宣称任何地方都不存在。)

票数 87
EN

Software Engineering用户

发布于 2010-12-08 07:52:05

Python将被解释为字节码。.py源代码首先被编译成字节码作为.pyc。可以解释此字节码(正式CPython)或JIT编译(PyPy)。Python源代码(.py)可以编译成不同的字节代码,比如IronPython (.Net)或Jython (JVM)。Python语言有多种实现。正式的一个是字节码解释的一个。还有字节码JIT编译的实现。

要对各种语言的实现进行速度比较,可以尝试使用这里。

票数 36
EN

Software Engineering用户

发布于 2015-10-23 05:33:38

编译和解释在某些情况下是有帮助的,但在技术意义上应用时,它是一种错误的二分法。

编译器(在最广义的意义上)是一个翻译器。它将程序A翻译为程序B,并在以后使用机器M执行程序。

翻译(广义上说)是执行者。它是一个执行程序A的机器M,尽管我们通常从这个定义中排除物理机器(或者像物理机器一样的非物理机器)。但从理论上看,这种区分有点武断。

例如,以re.compile为例。它将正则表达式“编译”为中间形式,并对该中间形式进行解释/计算/执行。

最后,这取决于您正在谈论的抽象级别,以及您关心的是什么。人们说“编译”或“解释”是对过程中最有趣部分的广泛描述,但实际上大多数程序都是以某种方式编译(翻译)和解释(执行)的。

CPython ( Python最流行的实现)对于执行代码来说非常有趣。因此,通常将CPython描述为解释。虽然这是个松散的标签。

票数 12
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/24558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档