-1

a.py 包含:

ip=raw_input()
import b
show()

b.py 包含:

def show:
    global ip
    print ip

它显示一个错误,说明 ip 未定义。如何在模块内使用主脚本中的变量?

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

4

3 回答 3

1

全局声明防止通过赋值创建局部变量。它不会神奇地搜索变量。

除非您将变量从一个模块导入到另一个模块,否则它在其他模块中不可用。

为了b能够访问 的成员a,您需要导入a. 你不能,因为a进口b.

这里的解决方案可能只是根本不使用全局变量。

于 2013-09-18T19:47:40.583 回答
0

您的代码的结构方式对我来说意味着您将import其视为有效地复制并粘贴b.pyinto的内容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

...但是重组会更理想,这样您就不会最终使用全局变量。

于 2013-08-29T00:03:34.933 回答
-1

我移动了一些喜欢的代码a.py,然后只返回需要的内容。b.pyraw_input()b.pya.py

所以无需担心全局变量等,因为一半的工作是由b.py.

于 2013-09-18T19:38:22.827 回答