如何从... import ...语句导入全局变量

时间:2014-08-13 10:18:37

标签: python python-2.7

我无法弄清楚它是如何在引擎盖下工作的。 我有以下文件:

test.py

x = 20

def foo():
    print x

test2.py

from test import foo

foo()

当我在test2.py中导入foo函数时,它是如何解析x的。据我所知,来自test import foo 的语句仅导入foo函数。

2 个答案:

答案 0 :(得分:4)

函数保留对其模块全局变量的引用。 foo有这样的参考:

>>> from test import foo
>>> foo.__globals__
{'x': 20, 'foo': <function foo at 0x102f3d410, ...}

当您导入内容时,Python会创建一个模块 object ;此对象存储在sys.modules中,它充当该模块的全局命名空间。然后import语句将“本地”模块中的名称绑定到该对象或该对象的属性。

函数引用相同的命名空间来查找定义它们的全局变量;它们基本上引用了相同的字典对象:

>>> import sys
>>> foo.__globals__ is sys.modules['test'].__dict__
True

答案 1 :(得分:0)

这一点,当函数记住它所定义的所有环境时,称为closure