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()包含模块名称,类名称和类变量。