Python globals()
函数
原文: https://thepythonguru.com/python-builtin-functions/globals/
于 2020 年 1 月 7 日更新
globals()
函数返回一个字典,其中包含在全局命名空间中定义的变量。 当从函数或方法中调用globals()
时,它将返回表示该函数或方法所定义的模块的全局命名空间的字典,而不是从其调用处。
其语法如下:
globals() -> dictionary
让我们举一些例子:
示例 1:
module1.py
#!/usr/bin/python3
from pprint import pprint
a = 100
b = 4
def foo():
x = 100 # x is a local variable
pprint(globals())
预期输出:
{'__builtins__': <module 'builtins' (built-in)>,
'__cached__': None,
'__doc__': None,
'__file__': './module1.py',
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f699cab37f0>,
'__name__': '__main__',
'__package__': None,
'__spec__': None,
'a': 100,
'b': 4,
'foo': <function foo at 0x7f699ca1e2f0>,
'pprint': <function pprint at 0x7f699ca1e6a8>}
试试看:
from pprint import pprint
a = 100
b = 4
def foo():
x = 100 # x is a local variable
pprint(globals())
以双下划线开头和结尾的名称是特殊的,并且由 Python 解释器定义。 我们在模块中定义的变量最后出现。
请注意,在foo()
函数内部定义的局部变量x
不包含在结果中。 要访问本地名称空间,请使用locals()
函数。
示例 2:
module1.py
#!/usr/bin/python3
from pprint import pprint
a = 100
b = 4
def foo():
x = 100 # x is a local variable
pprint(globals())
module2.py
#!/usr/bin/python3
import module1
x = 100
y = 2
module1.foo()
预期输出:
{'__builtins__': { ... }
'__cached__': '/home/overiq/tmp/__pycache__/module1.cpython-35.pyc',
'__doc__': None,
'__file__': '/home/overiq/tmp/module1.py',
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f17b12305c0>,
'__name__': 'module1',
'__package__': '',
'__spec__': ModuleSpec(name='module1', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f17b12305c0>, origin='/home/overiq/tmp/module1.py'),
'a': 100,
'b': 4,
'foo': <function foo at 0x7f17b121d488>,
'pprint': <function pprint at 0x7f17b121d730>}
在这种情况下,globals()
调用位于foo()
函数内部。 当从module2
调用foo()
函数时,它将打印在module1
的全局命名空间中定义的变量。