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

时间:2019-04-02 13:24:07

标签: python-3.x

我正在运行一个名为file1的python文件,其中,我正在导入另一个名为file2的python文件,并调用其功能之一。现在,file2需要文件1中定义的变量的值。此外,在将file2导入文件1中之前,该变量的值在运行时已更改。如何制作文件file2,从文件1访问变量的当前值?

file1的内容是:

variable = None

if __name__ == '__main__':
    variable = 123
    from file2 import func1
    func1()

file2的内容为:

from file1 import variable as var

def func1():
    print(var)

运行file1时,我希望file2中的功能func1打印123。但是它会打印None。解决此问题的一种方法是,在修改变量后将其内容保存在某个普通文件中,然后在需要时进行检索。但是在我使用此代码的应用程序中,变量的大小很大,大约为300 MB。因此,我相信每次对其进行修改时,将变量的内容写入文本文件的效率都不够高。我该怎么做呢? (欢迎提出任何建议)

1 个答案:

答案 0 :(得分:1)

主脚本以名称spring.datasource.url运行,而不是其模块名称。 __main__检查的工作方式也是如此。通过其常规名称导入它会创建一个包含常规内容的单独模块。

如果要访问其属性,请将其导入为if __name__ == '__main__'

__main__

请注意,导入from __main__ import variable as var def func1(): print(var) 很脆弱。除了复制模块之外,如果程序结构发生更改,您可能最终会导入其他模块。如果要交换全局数据,请使用定义明确的模块名称:

__main__

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

# 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)