在第一个文件中导入第二个文件时,如何将全局变量从第一个python文件访问到第二个文件中

How to access global variable from first python file into second when second file is imported in first file

本问题已经有最佳答案,请猛点这里访问。

我有两个python脚本。我试图将全局变量的值从1.py访问到2.py。

这是我的密码。

O.Py

1
2
3
4
5
6
7
8
9
import two

myvar = False

def fun():
    global myvar
    myvar = True

two.use_me()

两个

1
2
3
4
import one
print"from two:", one.myvar
def use_me():
    print"This is used in one.py"

我得到这个错误:

1
2
3
4
5
6
7
8
9
10
$ python two.py
from two:
Traceback (most recent call last):
  File"two.py", line 1, in <module>
    import one
  File"one.py", line 1, in <module>
    import two
  File"two.py", line 2, in <module>
    print"from two:", one.myvar
AttributeError: 'module' object has no attribute 'myvar'

不知道我在这里遗漏了什么。有人能帮忙吗?


您有一个循环输入。运行two.py时,执行import one,然后执行import two。现在,EDOCX1[1]立即返回,模块对象已经创建,但它是空的!所以在下一行你会得到一个AttributeError

回溯报告就是这么告诉你的:

  • 运行two.py的声明import one
  • 运行one.py的声明import two
  • 在文件two.py中,我得到一个AttributeError正在执行print"two.py", one.myvar

您的one.py模块根本不需要two,因此您应该删除import two语句。

循环导入通常是一个很强的信号,表明您的设计/体系结构中存在问题。尝试四处移动函数/类/变量以避免它们,最终组合两个模块。

有一些方法可以让它们工作,但它们很脆弱,应该避免。

如果您在two.py中有一个函数需要one.py中的内容,那么您应该将该函数真正移动到one.py中。

Yuo还可以考虑创建一个three.py,既进口two.py又进口one.py

你如何确切地打破你的循环导入取决于你所拥有的确切的代码,因此,仅以玩具为例,我们可以继续说几天"你可以只删除这个"或"你可以只移动那个"。如果您想要更精确的答案,我们需要看到非常精确的代码,它表示两个模块中涉及的定义。