У меня есть проект python с несколькими скриптами, запущенными файлами оболочки .sh.Глобальные переменные между скриптами
У меня есть файл конфигурации, который определяет словарь для использования в скриптах.
config.py
name_dict = dict()
file1.py
from config import *
..
..
## I have that reads tries to load the dump file that will contain the json values.
name_dict = json.load(open(dict_file))
##This file - file1.py calls another function fun() in file2.py, iteratively 3/4 times.
..
file2.fun(args)
print "Length of dict in file1.py : %d " %len(name_dict) // Always Zero ??? Considers name_dict as local variable.
В file2 - file2.py, я определил name_dict с глобальным keyword.fun() использует и обновляет name_dict и, наконец, я печатаю длину dict в начале, и я нахожу его обновленным.
def fun(args)
global name_dict
print "Length of dict file2.py(start): %d " %len(name_dict)
..
..
print "Length of dict file2.py(end): %d " %len(name_dict)
Каждый раз после того, как управление возвращается из file2, В file1.py я напечатает значение name_dict и она равна нулю. Но в следующем вызове fun() -> оператор печати по-прежнему печатает глобальное значение (длина) name_dict()
Но в файле file1.py он всегда равен нулю. Я предполагаю, что он рассматривается как локальная переменная. Как это исправить ?
Значит ли это, что каждый раз, когда я использую name_dict (в файле1 или file2), я должен использовать config.name_dict (используя его пространство имен)? – Learner
@Learner No. Вы можете использовать 'name_dict = config.name_dict' и использовать' name_dict', но когда вы выполняете задания, которые должны быть переданы другим модулям, вам придется это сделать.Во всяком случае, я думаю, что довольно редко использовать такой шаблон между модулем, поэтому вы можете просто реорганизовать код и избежать этого. – Bakuriu
Кроме того, 'from config import *' в file1 должен импортировать все переменные (включая name_dict), определенные в config.py, правильно? Это то, о чем я думал. Поправьте меня если я ошибаюсь. – Learner