a.py包含:
ip=raw_input()
import b
show()
b.py包含:
def show:
global ip
print ip
它显示了一个错误,说明ip没有定义。如何在模块中使用主脚本中的变量?
全局声明防止通过赋值创建局部变量。它不会神奇地搜索变量。
除非将变量从一个模块导入到另一个模块,否则它在其他模块中不可用。
为了使b
能够访问a
的成员,您需要导入a
。不能,因为a
导入b
。
这里的解决方案可能就是根本不使用全局变量。
您的代码的结构方式,对我来说意味着您将import
视为有效地将b.py
的内容复制并粘贴到a.py
中。然而,Python并不是这样工作的——除非通过函数或使用module.member
表示法显式传递,否则一个模块内的变量和函数在另一个模块中是不可访问的。
试着这样做:
a.py:
import b
ip = raw_input()
b.show(ip)
b.py:
def show(ip):
print ip
如果您需要在b
模块中进行一些处理,请传入相关函数,进行任何更改并返回。然后,在调用模块中重新分配它们。
编辑:如果您必须使用全局变量,请将b.py更改为如下所示:
ip = None
def show(temp):
global ip
ip = temp
# code here
print ip
但更理想的做法是进行重组,这样就不会使用全局变量。