Я пишу скрипт, который должен инициализировать и прочитать множество переменных и некоторые файлы, прежде чем вычислять некоторые вещи. Поскольку мне нужно выполнить вычисления несколько раз, я отделил инициализацию от вычислений, чтобы избежать повторного чтения одних и тех же файлов (что довольно дорого по времени) и сохранял исходные переменные в словаре, чтобы всегда использовать эти одни и те же переменные расчеты. Я хочу получить доступ к элементам в этом словаре в другой функции, например:
def func1(inputs):
#Do some stuff to get a dictionary
return dct
#Now having a dictionary with the variables say:
#dct={'var1':val1, 'var2':val2,...}
def calulations(dct):
#Somehow convert the dct into var1=val1, var2=val2, ...
result = var1*var2 #Calculate something
return result
Я пробовал , используя ** dct, который, как я понимаю, будет внутренне переводится в var1 = val1, var2 = val2 внутри вызова функции, но я должен написать в определении «вычислений» что-то вроде:
def calculations(var1,var2, **kwargs):
, поскольку это не работает:
def calculations(**kwargs):
result = var1*var2
return result
Но в зависимости от func1 словарь может иметь разное количество разных элементов / переменных, и, кроме того, он наверняка будет иметь много элементов, и объявить их в определении функции вычислений будет нечитабельно и станет кошмаром.
Также попытался использовать vars () или local () вместе с update (dct) следующим образом:
def calculations(dct):
vars().update(dct)
result = var1*var2
return result
хотя при отладке кажется, что var1 и var2 чтобы быть доступным перед вводом в строку "result = var1 * var2", я получаю NameError, когда пытаюсь использовать любой из элементов dct в качестве переменных. Этот метод работает, когда я вызываю vars (). Update (dct) вне функции, но он мне нужен внутри функции. (То же самое происходит при использовании local () вместо)
Оооо ... Что я мог сделать?