#python #metaprogramming #eval
#python #метапрограммирование #оценка
Вопрос:
Позвольте мне начать с того, что я полностью согласен с тем, что вы должны хранить данные вне имен ваших переменных, но давайте представим, что вам нужна такая функция:
def setglobal(s, x):
# Some kind of eval or exec trick like eval(s ' = ' x) so we end up
# with a global variable whose name is the string s and that has a value of x.
Комментарии:
1. Вы также можете поддерживать один глобальный диктант, к которому вы добавляете ключ s и значение x.
2. Просто ради обсуждения, в чем ваш интерес в такой функции, как эта?
3. Мне стыдно признаться! 🙂 Хорошо, я попытаюсь объяснить это: у меня есть словарь из пары десятков параметров для API, и я выполняю с ними целую кучу вычислений, так что было бы утомительно всегда ссылаться на них как
p['foo']
, а не простоfoo
. Звучит ли это безумно, или как будто я, вероятно, все делаю неправильно?
Ответ №1:
Должно ли это быть трюком exec / eval?
def setglobal(s, x):
globals()[s] = x
Ответ №2:
Похоже, это работает:
# Take a symbol name s as a string and a value x and eval(s ' = ' x) to set a
# global variable with name s to value x. For getglobal(s) use eval(s).
def setglobal(s, x):
exec "global " s "; " s " = " repr(x) in globals()