locals()方法更新并返回当前本地符号表的字典。
符号表是由编译器维护的数据结构,其中包含有关程序的所有必要信息。
这些包括变量名,方法,类等。
符号表主要有两种。
全局符号表
本地符号表
一个Global 符号表存储与程序的全球范围内的所有信息,并使用Python在访问globals()方法。
全局范围包含所有函数,与任何类或函数都没有关联的变量。
同样,Local 符号表存储与程序的本地范围有关的所有信息,并使用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表中的信息。