Python 3.x 如何从正在运行的文件中导入变量值?

Python 3.x 如何从正在运行的文件中导入变量值?,python-3.x,Python 3.x,我正在运行一个python文件,比如file1,在这个文件中,我正在导入另一个python文件,比如file2,并调用它的一个函数。现在,文件2需要文件1中定义的变量值。另外,在将file2导入file1之前,变量的值在运行时被更改。如何使文件file2,从文件1访问变量的当前值 文件1的内容是: variable = None if __name__ == '__main__': variable = 123 from file2 import func1 func1

我正在运行一个python文件,比如file1,在这个文件中,我正在导入另一个python文件,比如file2,并调用它的一个函数。现在,文件2需要文件1中定义的变量值。另外,在将file2导入file1之前,变量的值在运行时被更改。如何使文件
file2
,从文件1访问变量的当前值

文件1的内容是:

variable = None

if __name__ == '__main__':
    variable = 123
    from file2 import func1
    func1()
文件2的内容是:

from file1 import variable as var

def func1():
    print(var)

当我运行file1时,我希望file2中的函数
func1
打印123。但它打印的是
。解决这个问题的一种方法是在修改变量时将其内容保存在普通文件中,然后在需要时检索它。但是在我使用这段代码的应用程序中,变量的大小非常大,大约300MB。因此,我认为每次修改变量时,将其内容写入文本文件的效率不够。我该怎么做?(欢迎任何建议)

主脚本以名称
\uuuuu main\uuuu
运行,而不是以其模块名称运行。这也是
if uuuuu name uuuu=='\uuuuu main\uuuuuu'
检查的工作方式。按其常规名称导入将创建一个包含常规内容的单独模块

如果要访问其属性,请将其作为
\uuuu main\uuu
导入:

from __main__ import variable as var

def func1():
    print(var)

请注意,导入
\uuuuu main\uuuu
是脆弱的。在复制模块的基础上,如果您的程序结构发生更改,您可能会最终导入不同的模块。如果要交换全局数据,请使用定义良好的模块名称:

# constants.py
variable = None

# file1.py
if __name__ == '__main__':
    import constants
    constants.variable = 123
    from file2 import func1
    func1()

# file2.py
from constants import variable as var

def func1():
    print(var)

强制性免责声明:理想情况下,函数不依赖于全局变量。使用参数将变量传递到函数中:

# constants.py
variable = None

# file1.py
if __name__ == '__main__':
    from file2 import func1
    func1(123)

# file2.py
from constants import variable

def func1(var=variable):
   print(var)

你为什么不把
var
作为一个参数传入呢?@MisterMiyagi这肯定能解决我的问题。但我只是想知道,如何访问其他文件中变量的运行时值。这太棒了。使用
\uuuu main\uuuu
会使事情复杂化。constants包非常适合交换全局数据。谢谢你的意见。我将进一步查看
常量
软件包,看看它还提供了哪些其他功能。@vighnesharut
常量
只是我编造的一个名字。只需选择一个包/环境特有的名称,并创建一个模块,其中只包含变量。