You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何理解Python模块的private symbol table与函数的global symbol table?

关于Python模块私有符号表与函数全局符号表的解析

首先直接给你明确答案:你运行脚本后输出的{'__name__': '__main__', '__doc__': None, ...}完全就是当前模块的全局符号表!

下面给你拆解清楚这两个符号表的关系,以及怎么查看它们:

  • 模块的私有符号表:每个Python模块在被加载时,都会生成一个专属的私有符号表,本质是个字典,用来存储模块内所有的变量、函数、类等标识符和对应的对象。你可以把它理解成模块的"全局命名空间"——模块里的所有顶级代码都在这个空间里运行。
  • 函数的全局符号表:当你在模块里定义函数时,这个函数会自动把所在模块的私有符号表当作自己的global作用域。也就是说,函数里用global关键字声明的变量,其实就是直接操作模块的私有符号表。

怎么查看不同场景下的符号表?

  1. 查看当前模块的全局符号表:就像你做的那样,直接调用globals()函数,它会返回当前模块私有符号表的字典引用。
  2. 查看其他模块的私有符号表:导入模块后,访问它的__dict__属性就行。比如:
import os
print(os.__dict__)

这个输出就是os模块的私有符号表内容。
3. 查看函数的全局符号表:每个函数对象都有__globals__属性,它直接指向函数所属模块的私有符号表。举个例子:

def my_func():
    x = 10
    print("局部变量:", locals())

print("函数的全局符号表:", my_func.__globals__)
my_func()

运行后你会发现,my_func.__globals__的内容和直接调用globals()的结果是一致的。

再补充一点:当你把脚本作为主程序运行时(比如python symbol_table.py),这个脚本会被当作名为__main__的模块加载,所以你打印的globals()就是这个__main__模块的私有符号表,也就是它的全局符号表。

内容的提问来源于stack exchange,提问作者Wizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:47:05