У меня есть этот бит кода:
from ast import literal_eval
# evil exec loop
param_dict = literal_eval(sys.argv[1])
for key in param_dict.keys():
if type(param_dict[key]) != str:
exec(key+"={}".format(param_dict[key]))
else:
exec(key+"='{}".format(param_dict[key])+"'")
пожалуйста, не судите меня по моему использованию exe c. А) этот код предназначен только для меня, и я доверяю своим данным и Б) Я считаю, что постоянная ссылка на словарь в отличие от обычных переменных утомительна. При этом, если вы знаете лучший способ сделать это, я открыт для этого.
Теперь к моему вопросу. Я хотел бы взять этот код и поместить его в функцию в другом файле, а затем вызывать эту функцию только со словарем (или строкой, представляющей его) в качестве аргумента. Но когда я попробовал это, программа не может найти имена переменных. Я предполагаю, что эти переменные остаются в области действия функции, поэтому их нельзя увидеть за ее пределами. Есть ли способ обойти это (без использования глобальных)?