簡體   English   中英

如何從Python中的其他文件更改函數中變量的值?

[英]How to change the value of a variable in a function from a different file in Python?

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

請忽略我的菜單設置,我一直在嘗試使此功能正常運行,因為它更重要。

來自Python的常見問題解答

如何在模塊之間共享全局變量?

在單個程序中的各個模塊之間共享信息的規范方法是創建一個特殊的模塊(通常稱為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)) 

一種方法是從外包文件中讀取它。 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

我認為這是實現此目的的更好方法,因為您可以將模塊分離,並擁有更可維護和可銷售的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM