Почему не работает exec("global numb")?

У меня возник вопрос, как сделать переменную глобальной, не зная заранее её имени. Первое что мне пришло в голову, это использовать exec(), но, видимо, я не до конца понял как работает эта функция. Я попробовал:

def df(variable):
    exec(f"global {variable}")
    exec(f"{variable} = 1")

numb = 10
variable = "numb"
print(numb)
df(variable)
print(numb)

В моих мечтах вывод должен получиться

10
1

Однако выходит

10
10

Пожалуйста, подскажите что я делаю не так. Если exec() на такое не способен, то может быть есть другая функция, которая может это сделать.

PS: Если что, то это просто пример, в полном коде переменная variable задаётся путём ввода с клавиатуры, но там это тоже не работает((


Ответы (1 шт):

Автор решения: вася

Мечты сбываются!

def df(variable):
    exec(f"global {variable}")
    exec(f"{variable} = 1", globals())

numb = 10
variable = "numb"
print(numb)
df(variable)
print(numb)

Как указали в комментариях, exec(f"global {variable}") можно не писать.

→ Ссылка