在另一个python文件中使用函数内部的变量

时间:2015-12-13 19:52:57

标签: python python-3.x import

我似乎无法做到这一点。

我有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)

我对此代码有三个不同的问题:

  1. 为什么我会收到错误:AttributeError: 'module' object has no attribute 'name' 我肯定知道b.py无法访问b.py中函数中定义的变量,但我该如何解决这个问题呢?
  2. 在这种情况下全局变化了吗?如果没有,为什么?
  3. 我尝试name = a.foo.name而不是name = a.name,但这也没有做到这一点并给了我:AttributeError: 'function' object has no attribute 'name', 这在任何情况下都是可行的,我做错了什么?
  4. 感谢您花时间和对不起,如果这对您们中的某些人来说显而易见,我仍然会深入研究。

1 个答案:

答案 0 :(得分:0)

脚本不是模块。这是一个令人头疼的问题但是当你运行python3 a.py时,a.py不是一个模块(或者更确切地说,它是一个名为__main__的模块),它将在你导入时重新加载。

假设我有 c.py

print('hello')
if __name__=="__main__":
    import c

当我运行它时,我得到了

hello
hello

使用您的示例进行说明,如果我将 b.py 更改为

import __main__

def bar():
    name = __main__.name
    print(name)

有效。但只有一点,因为如果某人导入a你仍然有两个模块和两个变量副本。

如果您需要共享数据,则必须使用导入的模块,而不是顶级脚本。当我想要共享数据时,我创建了一个单独的模块,它不会导入任何东西(或只导入标准库),它是空的或者我想要共享的变量有默认值。