Как изменить значение переменной в функции из другого файла в Python? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть два файла, скажем, file1 и file2.Я хочу иметь возможность редактировать значение переменной (эпохи) из file1 в file2, но оно находится в функции main () в file1.

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 голосов
/ 11 декабря 2018

Одним из способов является чтение его из стороннего файла.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

Я думаю, что это лучший способ сделать это, когда вы разъединяете модули и имеетеболее понятный и продаваемый код.

0 голосов
/ 11 декабря 2018

Из Часто задаваемые вопросы по Python :

Как обмениваться глобальными переменными между модулями?

Канонический способ обмена информацией между модулями в рамках одной программы:создать специальный модуль (часто называемый config или cfg).Просто импортируйте модуль конфигурации во все модули вашего приложения;модуль становится доступным как глобальное имя.Поскольку существует только один экземпляр каждого модуля, любые изменения, внесенные в объект модуля, отражаются повсеместно.Например:

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))
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...