【发布时间】:2015-12-13 19:52:57
【问题描述】:
我似乎无法完成这项工作。
我有 2 个 python 文件,比如说 a.py 和 b.py
在 a.py 中是这样的:
def foo():
global name
name = "foo"
import b
b.bar()
if __name__ == "__main__":
foo()
在 b.py 中:
import a
def bar():
name = a.name
print(name)
我对这段代码有三个不同的问题:
- 为什么会出现错误:
AttributeError: 'module' object has no attribute 'name'我确定 b.py 无法访问 b.py 函数中定义的变量,但我该如何解决呢? - 在这种情况下,全局是否会发生任何变化?如果不是,为什么?
- 我尝试做
name = a.foo.name而不是name = a.name,但这也没有成功,给了我:AttributeError: 'function' object has no attribute 'name', 这在任何情况下都可行吗?我做错了什么?
感谢您抽出宝贵时间,如果这对你们中的某些人来说似乎很明显,我很抱歉,我仍在继续。
【问题讨论】:
-
name在a.py中的定义在哪里? -
@ozgur 是的,它在 a.py 的函数 foo() 中定义
-
在函数内部定义的变量绑定到函数的局部范围,因此它们在函数外部不可见。您需要在
foo()之外的 a.py 中的某处定义name。 -
@ozgur 问题是,稍后我想将“名称”更改为其他内容,当我在函数之外定义它时,导入时它总是会重置吗?
-
其实不是,
foo()执行一次后,即使你再次import a,变量name仍会在当前进程中保持"foo"。
标签: python python-3.x import