Python内置函数 locals 和 globals 对比
在 Python 中,有两个内置函数 locals()
和 globals()
用于获取当前作用域中的变量名称和变量值。
locals()
locals()
函数返回一个 Python 字典,其中包含当前作用域中的所有局部变量及其对应的值。
例如:
def foo():
a = 1
b = 2
print(locals())
foo()
输出:
{'a': 1, 'b': 2}
可以看到,返回的字典中包含变量 a
和 b
以及它们的值。
需要注意的是,locals()
函数只能在函数内部使用,它返回的字典不包含全局变量的信息。
globals()
globals()
函数返回一个 Python 字典,其中包含当前作用域中的所有全局变量及其对应的值。
例如:
a = 1
b = 2
def foo():
print(globals())
foo()
输出:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10d7bff40>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, 'foo': <function foo at 0x10d7c35e0>}
可以看到,返回的字典中包含变量 a
和 b
以及它们的值。
需要注意的是,当 globals()
函数在 Python 解释器的第一层(即全局作用域)调用时,返回的字典包含的信息会更多,包括解释器内置模块的名称和函数等。
对比
从上面的两个例子可以看到,locals()
和 globals()
函数都可以用来获取当前作用域中的变量信息,但是它们的返回值是不同的。
locals()
函数只返回当前作用域中的局部变量,不包括全局变量。globals()
函数返回当前作用域中的全局变量。
一般来说,在函数内部使用 locals()
函数,可以获得当前函数中定义的所有局部变量,而在函数外部使用 globals()
函数,则可以获得当前模块中定义的所有全局变量。
需要注意的是,为了避免命名冲突和不必要的状态泄露,应尽量避免在代码中使用 globals()
函数,除非真的有必要。
示例
以下示例展示了 locals()
和 globals()
函数的用法:
a = 1
b = 2
def foo():
x = 3
y = 4
print('Locals in foo():', locals())
print('Globals in foo():', globals())
foo()
print('Locals in main:', locals())
print('Globals in main:', globals())
输出:
Locals in foo(): {'x': 3, 'y': 4}
Globals in foo(): {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x109ff0c10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, 'foo': <function foo at 0x109ff0d08>}
Locals in main: {'a': 1, 'b': 2, 'foo': <function foo at 0x109ff0d08>}
Globals in main: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x109ff0c10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, 'foo': <function foo at 0x109ff0d08>}
可以看到,locals()
函数在 foo()
函数中返回的字典只包含局部变量 x
和 y
,而 globals()
函数返回的字典包含全局变量 a
和 b
,以及函数 foo()
本身。在 main
函数中使用这两个函数,返回的字典分别包含了函数 foo()
、全局变量 a
和 b
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python内置函数locals和globals对比 - Python技术站