Измените переменную __main __. Внутри модуля, указав имя переменной в виде строки - PullRequest
0 голосов
/ 01 марта 2020

Я пишу модуль, который содержит функцию f (строка). Подстрока строки - это имя переменной, которая находится в main , и мне нужно изменить ее так, чтобы изменения были видны в main .

. Как это сделать Я делаю это без фактической передачи переменной в функцию? (Строка является SQL -подобным запросом, а подстрока - именем таблицы).

На данный момент я нашел только очень уродливый способ, включающий изменение встроенных переменных ... Я перепробовал много вещей, связанных с exec, но ничто не могло изменить переменную в main spacename.

Я смотрел на различные обсуждения, но не смог исправить это.

1 Ответ

0 голосов
/ 01 марта 2020

Модули доступны через sys.modules. Вы можете установить переменную там.

def set_module_var(module_name, variable_name, value):
    #sys.modules["__main__"].__dict__[name] = value
    setattr(sys.modules[module_name], variable_name, value)

def f(string):
    variable_name, value = do_some_magic(string)
    set_module_var('__main__', variable_name, value)
...