Python locals()
时间:2020-02-23 14:42:57 来源:igfitidea点击:
Python locals()函数返回代表当前本地符号表的字典。
Python程序在符号表中维护程序信息。
符号表有两种类型:
本地符号表–存储与程序的本地范围有关的信息。
我们可以使用locals()函数获得此详细信息。全局符号表–存储与程序的全局范围有关的信息。
我们可以使用globals()函数获得此详细信息。
Python符号表包含有关变量名称,方法,类等的详细信息。
Python locals()
Python locals()函数不带任何参数。
我们来看一下locals()函数返回的字典。
print(locals())
输出:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10ab79358>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/hyman/Documents/github/theitroad/Python-3/basic_examples/python_locals_example.py', '__cached__': None}
如果执行print(globals())
,将得到相同的输出。
但是,根据您的Python安装,输出可能会有所不同。
那么locals()和globals()之间的区别其中?
这没有什么区别,因为我们在当前模块本身中执行locals()和globals()。
当我们在方法或者类中调用这些函数时,会出现差异。
内部方法的Python locals()
让我们看看在函数体内调用locals()和globals()时的输出是什么。
# locals() inside function def fx1(): var = 1 global gl gl = 'x' print('\nlocals() value inside function\n', locals()) print('\nglobals() value inside function\n', globals()) fx1()
输出:
locals() value inside function {'var': 1} globals() value inside function {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10277c358>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/hyman/Documents/github/theitroad/Python-3/basic_examples/python_locals_example.py', '__cached__': None, 'fx1': <function fx1 at 0x1027141e0>, 'gl': 'x'}
因此很明显,函数内部的locals()返回了局部变量,请注意,全局变量是全局符号表字典的一部分。
类内部的Python locals()
我们来看一下在类体内部调用locals()时的输出。
# locals() inside class class Data: x = 0 print('\nlocals() value inside class\n', locals()) print('\nglobals() value inside class\n', globals())
输出:
locals() value inside class {'__module__': '__main__', '__qualname__': 'Data', 'x': 0} globals() value inside class {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10277c358>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/hyman/Documents/github/theitroad/Python-3/basic_examples/python_locals_example.py', '__cached__': None, 'fx1': <function fx1 at 0x1027141e0>, 'gl': 'x'}
在类主体中调用时,locals()包含模块名称,类名称和类变量。