我是python的新手并从一些基本示例开始,发现一个问题是导入的python模块是否可以直接访问导入它的模块中的全局变量,反之亦然。
以下是我的代码:
import y
def f():
global x
x = 6
print(x)
def main():
global x
x = 3
print(x)
f()
y.g()
if __name__ == '__main__':
main()
def g():
global x
x += 1
print(x)
以下是追溯:
3
6
Traceback (most recent call last):
File "C:\Users\abc\Desktop\x.py", line 16, in <module>
main()
File "C:\Users\abc\Desktop\x.py", line 13, in main
y.g()
File "C:\Users\abc\Desktop\y.py", line 3, in g
x += 1
NameError: name 'x' is not defined
答案 0 :(得分:1)
Python中的“全局变量”表示相对于模块的全局 。您有一个x.x
变量,它是一个y.x
变量,它是未定义的,当您尝试检索其内容时会产生错误。如果你想访问另一个模块的全局变量,你必须明确地导入该模块(虽然搞乱另一个模块的全局变量几乎总是一个坏习惯)。
供参考,请参阅例如Python docs:
如果
global
语句出现在块中,则语句中指定的名称的所有使用都将引用该名称在顶级命名空间中的绑定。通过搜索全局命名空间(即包含代码块的模块的命名空间)和内置命名空间(内置模块的命名空间),在顶级命名空间中解析名称。首先搜索全局命名空间。如果在那里找不到名称,则搜索内置命名空间。global
语句必须在名称的所有使用之前。