Python是否在运行时严格解释,还是可以用它来开发作为后台应用程序运行的程序(如Java应用程序或C程序)?
答案 0 :(得分:80)
正如各种各样的回答会告诉你的那样,解释和编译之间的界限不再像创造这些术语时那样清晰。事实上,将 languages 视为解释或编译也是错误的,因为语言的不同实现可能会做不同的事情。这些天你可以找到C interpreters和Javascript compilers。
即使在查看实施时,事情仍然不明确。有各种解释。以下是解释和编译之间的一些等级:
纯粹的解释。几乎就是它在锡上所说的。阅读一系列来源并立即按照说明进行操作。这实际上并不是由许多生产语言完成的 - 几乎就像shell脚本一样。
Tokenisation +解释。以上是一个微不足道的优化。它不是从头开始解释每一行,而是首先进行标记(即,不是看到像“print 52 + x”这样的字符串,而是将其转换为标记流(例如。[PRINT_STATEMENT, INTEGER(52), PLUS_SIGN, IDENTIFIER('x')]
),以避免重复执行该状态许多版本的基础工作都是这样的。
Bytecode汇编。这是Java和C#等语言采用的方法(尽管见下文)。代码转换为“虚拟机”的指令。然后解释这些指令。这也是python采用的方法(或者至少是cpython,最常见的实现。)Jython和Ironpython实现也采用这种方法,但编译为Java和C#虚拟机的字节码resepectively。
字节码+ Just in Time compilation。如上所述,而不是解释字节码,将执行的代码从执行点的字节码编译,然后运行。在某些情况下,这实际上可以胜过本机编译,因为它可以自由地对代码执行运行时分析,并且可以使用当前处理器的特定功能(而静态编译可能需要针对最小公分母CPU进行编译)。 Java的更高版本和C#使用这种方法。 Psyco为python执行此操作。
本机机器代码编译。代码被编译为目标系统的机器代码。你可能认为我们现在完全取消了解释,但即使在这里也有微妙之处。有些机器代码指令实际上并不直接在硬件中实现,但实际上是通过microcode实现的 - 甚至有时会解释机器代码!
答案 1 :(得分:48)
这里有多个问题:
答案 2 :(得分:24)
从技术上讲,Python被编译为字节码,然后在virtual machine中进行解释。如果Python编译器能够将字节码写入.pyc文件,它(通常)会这样做。
另一方面,Python中没有明确的编译步骤,因为有Java或C.从开发人员的角度来看,Python看起来只是直接解释.py文件。此外,Python提供了一个交互式提示,您可以在其中键入Python语句并立即执行它们。因此,Python中的工作流程与解释语言的工作流程比编译语言的工作流程更相似。对我(以及许多其他开发人员,我想),工作流的区别比是否存在中间字节码步骤更重要。
答案 3 :(得分:4)
Python是一种解释型语言,但它是在运行时解释的字节码。还有许多工具可以帮助您使程序作为Windows服务/ UNIX守护程序运行。
答案 4 :(得分:2)
是的,Python已被解释,但您也可以将它们作为长时间运行的应用程序运行。
答案 5 :(得分:2)
是的,它被解释了,它的主要实现首先编译字节码,然后运行它(如果你使用java源并且JVM在运行它之前编译它)。不过,您仍然可以在后台运行您的应用程序。实际上,你可以在后台运行任何东西。