我有一个模块代码:
X = 88
def f():
global X
X = 99
另一个使用此模块的文件:
from First import X,f
X = 11
f()
print(X)
现在根据我的理解,因为我们明确地导入符号x和f,它们应该成为导入模块名称空间的一部分。
由于函数f改变了全局X.答案应该是99。
但情况似乎并非如此,因为输出为11。
请帮我理解原因?
答案 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的方式。