查询 python 执行模型

Query on python execution model

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

1) 当我们说 python program.py 时 python 源代码的每一行都直接转换为在处理器上执行的机器指令集吗?

2) 上图有 GlobalFrame 和 LocalFrame 以及对象。在上面的程序中,Frames Objectscode 在运行时驻留在什么地方?在 python 解释器的虚拟内存地址 space 中是否有单独的内存 space 分配给此程序?

"Does every line of python source directly gets converted to set of machine instructions that get executed on processor?"

没有。 Python 代码(不一定按行)通常会转换为中间代码,然后由某些人称为 "virtual machine" 的内容解释(令人困惑,因为 VM 在其他上下文中意味着完全不同的东西,但是嗯) . CPython,最流行的实现(每个人都认为是 "python":-),使用它自己的字节码和解释器。 Jython 使用 Java 字节码和 JVM 来 运行 它。等等。 PyPy,也许是最有趣的实现,几乎可以发出任何类型的结果代码,包括机器代码——但它远非逐行处理!-)

"Where does Frames Objects and code reside in runtime"

在 "heap" 上,由 malloc 定义,或等同于 CPython 实现中的 C 编程语言(或 Java 对于 Jython,等等等等)。

也就是说,每当创建一个新的 PyObject 时(在 CPython 的内部),一个 malloc 或等价物就会发生并且该对象永远通过指针引用( a PyObject*,在 C 语法中)。函数、框架、代码对象等等,几乎所有东西都是Python中的对象——没有特殊处理,"everything is first-class"!-)