查询python执行模型

时间:2015-02-01 04:31:05

标签: python interpreter

以下是在另一个函数中定义函数的程序。

enter image description here

1)当我们说python program.py是否每一行python源都直接转换为在处理器上执行的一组机器指令?

2)上图包含GlobalFrame和LocalFrame以及Objects。在上面的程序中,Frames Objectscode位于运行时的哪个位置?在python解释器的虚拟内存地址空间中是否为该程序提供了单独的内存空间?

1 个答案:

答案 0 :(得分:3)

“每一行python源是否直接转换为在处理器上执行的一组机器指令?”

没有。 Python代码(不一定是行)通常会被转换为中间代码,然后由某些人称之为“虚拟机”来解释(令人困惑的是,因为VM意味着在其他环境中完全不同,但很好)。 CPython,最流行的实现(每个人都认为是“python”:-),使用自己的字节码和解释器。 Jython使用Java字节码和JVM来运行它。等等。 PyPy,也许是最有趣的实现,可以发出几乎任何类型的结果代码,包括机器代码 - 但它远非一行一行! -

“框架对象和代码驻留在运行时”

在“堆”上,由malloc或等价物定义,在CPython实现的C编程语言中(或Jython的Java等等)。

也就是说,无论何时创建一个新的PyObject(在CPython的内部),都会发生malloc或等价物,并且该对象永远通过指针(PyObject*在C中引用句法)。函数,框架,代码对象等等,几乎所有东西都是Python中的对象 - 没有特殊处理,“一切都是一流的”! - )