我有一个模块代码:
X = 88
def f():
global X
X = 99
Run Code Online (Sandbox Code Playgroud)
另一个使用此模块的文件:
from First import X,f
X = 11
f()
print(X)
Run Code Online (Sandbox Code Playgroud)
现在根据我的理解,因为我们明确地导入符号x和f,它们应该成为导入模块命名空间的一部分.
并且因为函数f改变了全局X. 答案应该是99.
但事实似乎并非如此,因为输出为11.
请帮我理解为什么?
通过使用from module import ...语法,您可以创建新名称,这些名称绑定到与原始模块中的名称相同的对象.这些名字是独立的.
导入后你有这个:
First.X ----\
|--> 88
another.X --/
Run Code Online (Sandbox Code Playgroud)
然后你another.X 只设置为11,所以你有这个:
First.X --------> 88
another.X ------> 11
Run Code Online (Sandbox Code Playgroud)
在你打电话之后f(),你有这个:
First.X --------> 99
another.X ------> 11
Run Code Online (Sandbox Code Playgroud)
你可以改为只导入模块; 绑定名称First以指向模块对象:
import First
first.X = 11
first.f()
print(first.X)
Run Code Online (Sandbox Code Playgroud)
现在所有代码都First.X只能运行.
您可能想要了解Python名称和对象的工作原理.
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |