Альтернативы exec/eval?
Я пытался найти способ надежно установить и получить значения переменных с именами в строках. Все, что я могу найти близко к этому, не всегда работает. Переменные могут быть в любом модуле, и эти модули импортируются.
Какой безопасный / правильный способ получить и установить значения переменных?
PS - Я новичок, как они приходят к питону
2 ответа
Решение
Хотя это работает, обычно не рекомендуется использовать имена переменных, имеющие значение для самой программы.
Вместо этого лучше использовать dict:
mydict = {'spam': "Hello, world!"}
mydict['eggs'] = "Good-bye!"
variable_name = 'spam'
print mydict[variable_name] # ==> Hello, world!
mydict[variable_name] = "some new value"
print mydict['spam'] # ==> "some new value"
print mydict['eggs'] # ==> "Good-bye!"
(код взят из другого ответа и изменен)
spam = "Hello, world!"
variable_name = 'spam'
print globals()[variable_name] # ==> Hello, world!
globals()[variable_name] = "some new value"
print spam # ==> some new value