我有两个文件,例如file1和file2。我希望能够从file2的file1中编辑变量(纪元)的值,但是它在file1的main()函数中。
File1.py
def main():
global epoch
epoch=1
train(args, model, device, train_loader, optimizer, epoch)
File2.py
global epoch
var = imageClassifier.main()
epochMenu = Menu(middleFrame)
subEpochMenu = Menu(epochMenu)
epochMenu.add_cascade(label="epoch", menu=subEpochMenu)
subEpochMenu.add_command(Label="1", command=imageClassifier.main(epoch ==
1))
subEpochMenu.add_command(Label="5", command=var.epoch == 5)
请忽略我的菜单设置,因为它更重要,因此我一直在尝试使此功能正常工作。
答案 0 :(得分:2)
来自Python's FAQ:
如何在模块之间共享全局变量?
在单个模块内跨模块共享信息的规范方法 程序是创建一个特殊的模块(通常称为config或cfg)。 只需将config模块导入应用程序的所有模块中即可;的 然后,该模块即可用作全局名称。因为只有 每个模块的一个实例,对模块对象所做的任何更改都会得到 反映到处。例如:
config.py:
x = 0 # Default value of the 'x' configuration setting
mod.py:
import config config.x = 1
main.py:
import config import mod print(config.x)
就您而言,这意味着您需要:
创建文件config.py
:
epoch = 1
修改file1.py
:
import config
def main():
train(args, model, device, train_loader, optimizer, config.epoch)
修改file2.py
:
import config
...
subEpochMenu.add_command(Label="1", command=imageClassifier.main(config.epoch ==
1))
答案 1 :(得分:0)
一种方法是从外包文件中读取它。 File1.py
可以访问文件并将其写入。
因此,在File1.py
下,您将拥有以下内容:
import json
dct = {"epoch": 7}
with open('config.json', 'w') as cf:
json.dump(dct, cf)
File2.py
可以从该 .json 中读取。
因此,在File2.py
下,您将拥有以下内容:
with open('config.json', 'r') as cf:
config = json.load(cf)
epoch = config['epoch']
print(epoch)
# 7
我认为这样做是更好的方法,因为您可以将模块解耦,并拥有更可维护和可销售的代码。