Альтернативы 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
Другие вопросы по тегам