模块内部的python全局变量

时间:2013-08-28 23:52:06

标签: python module global-variables

a.py包含:

ip=raw_input()
import b
show()

b.py包含:

def show:
    global ip
    print ip

显示错误,说明没有定义ip。 我如何使用模块内主脚本中的变量?

注意: 这只是一个示例。在a.py和b.py中都有一些复杂的编码,我之间需要上述功能。

4 个答案:

答案 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正在完成一半的工作。