Python 从模块内部修改一个名为字符串的_umain__;变量

Python 从模块内部修改一个名为字符串的_umain__;变量,python,variables,global-variables,exec,main,Python,Variables,Global Variables,Exec,Main,我正在编写一个模块,其中包含一个函数f(string)。 string的子字符串是main中变量的名称,我需要对其进行修改,以便修改在main中可见 如何在不将变量实际传递给函数的情况下执行此操作? (字符串是类似SQL的查询,子字符串是表名) 现在,我只发现了一种非常丑陋的方法,包括修改内置变量… 我尝试了很多与exec有关的东西,但是没有任何东西能够更改mainspacename中的变量 我查看了不同的讨论,但无法修复。模块可通过sys.Modules获得。您可以在那里设置变量 def se

我正在编写一个模块,其中包含一个函数f(string)。 string的子字符串是main中变量的名称,我需要对其进行修改,以便修改在main中可见

如何在不将变量实际传递给函数的情况下执行此操作? (字符串是类似SQL的查询,子字符串是表名)

现在,我只发现了一种非常丑陋的方法,包括修改内置变量… 我尝试了很多与
exec
有关的东西,但是没有任何东西能够更改mainspacename中的变量


我查看了不同的讨论,但无法修复。

模块可通过
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)

为什么不将变量传递给模块,然后让模块返回修改后的值呢?如果您有一个名为“foo”的变量的模块“a”,那么“a.foo”是该变量在“a”之外的名称。如果在模块“b”中导入a,则可以编写a.foo=x。“a”中随后访问foo的任何代码都将获得x的值。这几乎是可以想象的最糟糕的编程实践。1)为什么模块依赖于脚本中的变量?2) 为什么要使用独立变量而不是可以使用(sub)字符串进行索引的dict?您的函数可以执行
sys.modules[“\uuuuu main\uuuuuuu”]。\uuuuuu dict\uuuuu[variable\u name]=新值
。我不知道你所说的“将变量传递给函数”是什么意思。我找到了一个解决方案,只需在模块内部使用:
exec(“\uu main\uu.”+substring+”=new\u value”)
。谢谢你的帮助。