📅  最后修改于: 2020-09-20 04:17:12             🧑  作者: Mango
符号表是由编译器维护的数据结构,其中包含有关程序的所有必要信息。
这些包括变量名,方法,类等。
符号表主要有两种。
全局符号表存储了与程序的全局范围有关的所有信息,并在Python使用globals()方法进行访问。
全局范围包含所有函数,不与任何类或函数关联的变量。
同样, 本地符号表存储与程序的本地范围有关的所有信息,并使用locals()
方法在Python进行访问。
局部作用域可以在函数内,类内等。
推荐阅读: Python的命名空间和范围
locals()
方法的语法为:
locals()
locals()
方法不接受任何参数。
locals()
方法更新并返回与当前本地符号表关联的字典。
locals()
输出
{'In': ['', 'locals()'],
'Out': {},
'_': '',
'__': '',
'___': '',
'__builtin__': ,
'__builtins__': ,
'__name__': '__main__',
'_dh': ['/home/repl'],
'_i': '',
'_i1': 'locals()',
'_ih': ['', 'locals()'],
'_ii': '',
'_iii': '',
'_oh': {},
'_sh': ,
'exit': ,
'get_ipython': >,
'quit': }
注意: globals()
和locals()
符号表是相同的。
def localsNotPresent():
return locals()
def localsPresent():
present = True
return locals()
print('localsNotPresent:', localsNotPresent())
print('localsPresent:', localsPresent())
输出
localsNotPresent: {}
localsPresent: {'present': True}
def localsPresent():
present = True
print(present)
locals()['present'] = False;
print(present)
localsPresent()
输出
True
True
与globals()
词典反映对实际全局表的更改不同, locals()
词典可能不会更改locals表中的信息。