a.py 包含:
ip=raw_input()
import b
show()
b.py 包含:
def show:
global ip
print ip
它显示一个错误,说明 ip 未定义。如何在模块内使用主脚本中的变量?
注意: 这只是一个示例。在 a.py 和 b.py 内部都有一些复杂的编码,我需要上述功能。
a.py 包含:
ip=raw_input()
import b
show()
b.py 包含:
def show:
global ip
print ip
它显示一个错误,说明 ip 未定义。如何在模块内使用主脚本中的变量?
注意: 这只是一个示例。在 a.py 和 b.py 内部都有一些复杂的编码,我需要上述功能。
全局声明防止通过赋值创建局部变量。它不会神奇地搜索变量。
除非您将变量从一个模块导入到另一个模块,否则它在其他模块中不可用。
为了b
能够访问 的成员a
,您需要导入a
. 你不能,因为a
进口b
.
这里的解决方案可能只是根本不使用全局变量。
您的代码的结构方式对我来说意味着您将import
其视为有效地复制并粘贴b.py
into的内容a.py
。然而,这不是 Python 的工作方式——一个模块中的变量和函数将无法在另一个模块中访问,除非通过函数或使用module.member
符号显式传递。
尝试这样做:
一个.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
...但是重组会更理想,这样您就不会最终使用全局变量。
我移动了一些喜欢的代码a.py
,然后只返回需要的内容。b.py
raw_input()
b.py
a.py
所以无需担心全局变量等,因为一半的工作是由b.py
.