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 шт):

Автор решения: CrazyElf

Наверное, вот так, хотя не совсем уверен, что вы хотели:

a = [1, 2, 3]
def f(x):
    globals()[x] = {'spam' : 1}

f('a')
print(a)
# {'spam': 1}
→ Ссылка