Задайте глобальную переменную с помощью eval или exec в Python

#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()