【发布时间】:2014-05-01 13:09:35
【问题描述】:
当在http://pythontutor.com/ 上运行时,关于存储值和函数的符号,我的查询位于以下程序中。
我的问题是:
python 执行模型如何在开始解释 python 程序之前在内存中查找上述程序?我如何可视化该内存布局?例如c可执行文件有代码/堆栈/堆/额外/数据段,仅作为示例,我不比较
'const' 是否是 32/64 位内存区域的名称,用于存储类型为整数的值 2?
add()/sub()/other 函数显示在 Objects 列中,如图所示,那么,我如何看待存储为 Objects 的函数?我如何可视化它?
如图所示,op 是指向函数 sub() 的函数指针吗?
【问题讨论】:
-
您询问的大部分细节对于 Python 编程应该完全忽略。 Python 不是根据内存或指针或类似的低级事物来定义的。 (实现需要担心这些东西,但您不必担心实现。)
-
@user2357112 对于您的声明“对于 Python 编程,您应该完全忽略”,人们无法避免来自 OOP 范式(如 Java)或命令式范式(如 C)的人提出的此类问题。正如 Noel 在下面所说的那样python 是动态和强类型的,因此理解应用于文字和函数的类型事物(在运行时)是有意义的。在我开始使用python 2-3 年后,我不知道 op 是函数指针还是某个类的引用变量,我觉得这不是学习语言的正确方法。
-
我觉得,声明性范式语言(如 SQL)不鼓励用户学习内部细节。
-
当你用 C 编程时,你会考虑内存和指针,因为这些东西是 C 的基础。除非你真的需要,否则你不会考虑哪个寄存器存储哪个变量或哪个您正在访问的缓存层。这些问题由实施为您处理。同样,在 Python 中,您会根据对象及其行为进行思考。您无需担心内存和指针,因为在 Python 级别,这些是实现细节。
-
我去掉了Java标签,它与Java无关。它也与 C 无关,但我保留了该标签,因为您试图将 Python 的内存模型与 C 的内存模型进行比较。尽管如此,我还是给你的问题打了-1,因为尝试理解 Python 程序如何映射到 C 的内存模型是没有用的。相反,尝试学习如何用 C 编写 Python 解释器(例如,通过从 python.org 获取源代码)。