Python模块中的范围

时间:2016-11-09 15:01:58

标签: python python-3.x

我有一个模块代码:

X = 88 
def f():
    global X 
    X = 99

另一个使用此模块的文件:

from First import X,f
X = 11
f()
print(X)

现在根据我的理解,因为我们明确地导入符号x和f,它们应该成为导入模块名称空间的一部分。

由于函数f改变了全局X.答案应该是99。

但情况似乎并非如此,因为输出为11。

请帮我理解原因?

1 个答案:

答案 0 :(得分:7)

通过使用from module import ...语法,您可以创建名称,这些名称绑定到与原始模块中的名称相同的对象。这些名称是独立的

导入后你有这个:

First.X ----\
             |--> 88
another.X --/

然后,您将another.X 设置为11,这样就可以了:

First.X --------> 88

another.X ------> 11

在你致电f()之后,你有了这个:

First.X --------> 99

another.X ------> 11

您可以改为导入 模块;绑定名称First以指向模块对象:

import First
first.X = 11
first.f()
print(first.X)

现在所有代码仅在First.X上运行。

您可能想了解Python names and objects work的方式。