Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python执行模型查询_Python_Interpreter - Fatal编程技术网

python执行模型查询

python执行模型查询,python,interpreter,Python,Interpreter,下面是在另一个函数中定义函数的程序 1) 当我们说python program.py时,是不是每一行python源代码都直接被转换成在处理器上执行的机器指令集 2) 上图中有GlobalFrame和LocalFrame以及对象。在上面的程序中,帧对象和代码在运行时驻留在哪里?在python解释器的虚拟内存地址空间中是否有一个单独的内存空间分配给这个程序?“python源代码的每一行是否都直接转换为在处理器上执行的机器指令集?” 不需要。Python代码(不一定是行代码)通常会转换成中间代码,然后

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

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

2) 上图中有GlobalFrame和LocalFrame以及对象。在上面的程序中,
对象
代码
在运行时驻留在哪里?在python解释器的虚拟内存地址空间中是否有一个单独的内存空间分配给这个程序?

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

不需要。Python代码(不一定是行代码)通常会转换成中间代码,然后由一些人称之为“虚拟机”的东西来解释(令人困惑的是,VM在其他上下文中的含义完全不同,但也很好)。CPython是最流行的实现(每个人都认为它是“python”):-,它使用自己的字节码及其解释器。Jython使用Java字节码和JVM来运行它。等等PyPy可能是最有趣的实现,它可以发出几乎任何类型的结果代码,包括机器代码——但它远不是一个逐行处理的过程!)

“框架对象和代码在运行时的位置”

在“堆”上,由
malloc
定义,或在CPython实现中使用C编程语言(或Java用于Jython等)的等效程序


也就是说,每当创建一个新的
PyObject
(在CPython的内部),就会出现一个
malloc
或等效对象,并且该对象将永远通过指针引用(C语法中的
PyObject*
)。函数、框架、代码对象等等,几乎所有东西都是Python中的对象——没有特殊处理,“所有东西都是一流的”!-)

在java中,我们将中间代码称为遵循Vm规范的“字节码”。python呢?哦,那么,代码/帧/对象在堆中?CPython(比Java早了一段时间)也将其中间代码称为“字节码”(尽管规范与JVM有很大不同)-Jython确实使用JVM字节码、Python.Net dotnet字节码等。是的,Python中的几乎所有东西都是对象,都是一流的,所有在
malloc
ed等之后都生活在堆中。你能帮我回答这个问题吗?CPython
code
对象引用字节码、常量(包括嵌套的代码对象)、名称和执行信息,如标志和堆栈大小。
frame
对象引用前一帧、代码对象、作用域名称空间(内置、全局、局部)和指令指针。常规函数调用的框架使用“快速局部变量”数组,但模块和类框架使用局部变量dict。调用函数时,将使用参数及其
\uuuuuuuuuuuuuuu
\uuuuuuuuu globals\uuuuuuu
\uuuuuuuuuuuuuu defaults\uuuuuuuuuuuuuuuu>(3.x)和
\uuuuuuuuuuuuuuuuuuuuu闭包>创建框架。