原文: https://thepythonguru.com/python-builtin-functions/globals/
于 2020 年 1 月 7 日更新
globals()函数返回一个字典,其中包含在全局命名空间中定义的变量。 当从函数或方法中调用globals()时,它将返回表示该函数或方法所定义的模块的全局命名空间的字典,而不是从其调用处。
其语法如下:
globals() -> dictionary
让我们举一些例子:
示例 1:
module1.py
#!/usr/bin/python3from pprint import pprinta = 100b = 4def foo():x = 100 # x is a local variablepprint(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 pprinta = 100b = 4def foo():x = 100 # x is a local variablepprint(globals())
以双下划线开头和结尾的名称是特殊的,并且由 Python 解释器定义。 我们在模块中定义的变量最后出现。
请注意,在foo()函数内部定义的局部变量x不包含在结果中。 要访问本地名称空间,请使用locals()函数。
示例 2:
module1.py
#!/usr/bin/python3from pprint import pprinta = 100b = 4def foo():x = 100 # x is a local variablepprint(globals())
module2.py
#!/usr/bin/python3import module1x = 100y = 2module1.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的全局命名空间中定义的变量。
