gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:21:04 25 4
gpt4 key购买 nike

我正在运行一个 python 文件,比如 file1,在那个文件中,我正在导入另一个 python 文件,比如 file2,并调用它的一个函数。现在,file2 需要文件 1 中定义的变量的值。另外,在将 file2 导入 file1 之前,变量的值在运行时已更改。如何使文件 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。因此,我相信每次修改变量时都将变量的内容写入文本文件的效率不够高。我该怎么做呢? (欢迎提出任何建议)

最佳答案

主脚本以名称 __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)

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

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

关于python-3.x - 如何从正在运行的文件导入变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55475928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com