多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Python `globals()`函数 > 原文: [https://thepythonguru.com/python-builtin-functions/globals/](https://thepythonguru.com/python-builtin-functions/globals/) * * * 于 2020 年 1 月 7 日更新 * * * `globals()`函数返回一个字典,其中包含在全局命名空间中定义的变量。 当从函数或方法中调用`globals()`时,它将返回表示该函数或方法所定义的模块的全局命名空间的字典,而不是从其调用处。 其语法如下: ```py globals() -> dictionary ``` 让我们举一些例子: **示例 1**: **`module1.py`** ```py #!/usr/bin/python3 from pprint import pprint a = 100 b = 4 def foo(): x = 100 # x is a local variable pprint(globals()) ``` **预期输出**: ```py {'__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>} ``` 试试看: ```py from pprint import pprint a = 100 b = 4 def foo(): x = 100 # x is a local variable pprint(globals()) ``` 以双下划线开头和结尾的名称是特殊的,并且由 Python 解释器定义。 我们在模块中定义的变量最后出现。 请注意,在`foo()`函数内部定义的局部变量`x`不包含在结果中。 要访问本地名称空间,请使用[`locals()`](/python-builtin-functions/locals/)函数。 **示例 2**: **`module1.py`** ```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`** ```py #!/usr/bin/python3 import module1 x = 100 y = 2 module1.foo() ``` **预期输出**: ```py {'__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`的全局命名空间中定义的变量。 * * * * * *