Python 3.x. Использование global на аргументе функции
Пусть, есть у нас функция, которая принимает на вход переменную, ссылающуюся на список, и меняет ее, заставляя ссылаться на словарь:
a = [1, 2, 3]
def f(x):
global a
a = {'spam' : 1}
Теперь у нас глобальная переменная ссылается на словарь.
Все отлично работает, но что, если мы хотим написать функцию в более общем виде, чтобы она работала с любой глобальной переменной, которая может иметь произвольное имя?
a = [1, 2, 3]
def f(x):
global x
a = {'spam' : 1}
Тут либо выходит ошибка (так как х уже является глобальной переменной), либо, если убрать global, то просто будет создана локальная переменная.
В итоге, задача следующая: Функция должна принимать глобальную переменную в качестве аргумента и переопределять ее (именно ее, а не ее компонент), при этом имя этой глобальной переменной функция не знает, знает только имя аргумента. Функция не должна ничего возвращать (никаких return или yield). Есть ли способ создать такую функцию (если да - то можно пример)?
Ответы (1 шт):
Наверное, вот так, хотя не совсем уверен, что вы хотели:
a = [1, 2, 3]
def f(x):
globals()[x] = {'spam' : 1}
f('a')
print(a)
# {'spam': 1}