Как передать значения переменных, определенные в файле JSON?
У меня есть эти две функции:
def fun1(a , b) :
print(a , b)
def fun2(c , d) :
print(c , d)
jsonfile = {
'function1' : {
'callback' : 'fun1' ,
'args' : ['a' , 'b']
},
'function2' : {
'callback' : 'fun2',
'args' : ['c' , 'd']
}
}
# iter the json file looking for the function callback + the args to call them ..
for key , value in jsonfile.items() :
function_name = value['callback']
function_args = value['args']
locals()[function_name](# how to pass the functions args ?? )
Когда я делаю:
locals()[function_name](function_args)
Я получаю следующую ошибку, потому что функция считает, что я передаю только 1 аргумент, а не 2:
locals()[function_name](function_args)
TypeError: fun1() missing 1 required positional argument: 'b'
Какие-либо предложения?
Разве не должно быть globals()
? Это не имеет значения вне функции, но если вы переместите код внутрь функции, он не будет работать.
Список аргументов нужно распаковать:
locals()[function_name](*function_args)
Благодарю. но как можно преобразовать эти распакованные в переменные. что-то вроде этого a = 'var1' b = 'var2', поэтому вывод на печать будет var1 var2
Если вы измените формат json на 'args' : {'a': 'var1' , 'b': 'var2'}
, вы можете распаковать с двумя звездочками, например [function_name](**function_args)
Вы можете использовать оператор распаковки на function_args
:
for key , value in jsonfile.items() :
function_name = value['callback']
function_args = value['args']
locals()[function_name](*function_args)
Это выводит:
a b
c d
опередить меня. Я собирался сказать, что список передается в функцию как один аргумент и его нужно распаковать.
Благодарю. но как можно преобразовать эти распакованные в переменные. что-то вроде этого a = 'var1' b = 'var2', поэтому вывод на печать будет var1 var2
a, b = <list to unpack>
Вы пробовали оператор
*
? docs.python.org/3/tutorial/…