a.py包含:
ip=raw_input()
import b
show()
b.py包含:
def show:
global ip
print ip
显示错误,说明没有定义ip。 我如何使用模块内主脚本中的变量?
注意: 这只是一个示例。在a.py和b.py中都有一些复杂的编码,我之间需要上述功能。
答案 0 :(得分:1)
全局声明阻止通过赋值创建局部变量。它不会神奇地搜索变量。
除非您将变量从一个模块导入另一个模块,否则它在其他模块中不可用。
要让b
能够访问a
的成员,您需要导入a
。你不能,因为a
导入b
。
这里的解决方案可能根本就是不使用全局变量。
答案 1 :(得分:0)
您的代码的结构方式,对我来说意味着您正在将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
...但重组会更理想,这样你最终不会使用全局变量。
答案 2 :(得分:-1)
import b
然后它应该是:
b.function_name()
在您的情况下,您的代码将是:
b.show()
所以,要从另一个模块调用一个函数,你应该这样写:
module_name.function_or_variable
答案 3 :(得分:-1)
我将a.py
的部分代码移至b.py
raw_input()
,然后b.py
只返回a.py
中需要的内容。
所以不必担心全局变量等,因为b.py
正在完成一半的工作。