如何从Python中的其他文件更改函数中变量的值?

时间:2018-12-11 12:32:58

标签: python function variables tkinter

我有两个文件,例如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)

请忽略我的菜单设置,因为它更重要,因此我一直在尝试使此功能正常工作。

2 个答案:

答案 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)

就您而言,这意味着您需要:

  1. 创建文件config.py

    epoch = 1
    
  2. 修改file1.py

    import config
    
    def main(): 
        train(args, model, device, train_loader, optimizer, config.epoch)
    
  3. 修改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

我认为这样做是更好的方法,因为您可以将模块解耦,并拥有更可维护和可销售的代码。