如何以变量值为名称创建Python全局变量?
Python 动态创建全局变量的优雅实现
问题背景
给定以下代码:
myGlobalVariableName = "zorp" myGlobalVariableValue = "hello"
如何利用myGlobalVariableName和myGlobalVariableValue的值,创建名为zorp的全局变量并将其设置为hello?
目前有一种可行但不推荐的实现方式:
exec( """ global %s %s = %r """ % ( myGlobalVariableName, myGlobalVariableName, myGlobalVariableValue, ), )
你提到可以通过操作__main__模块对象的__dict__属性来实现,类似这样的写法:
<main_module_object>.__dict__[myGlobalVariableName] = myGlobalVariableValue
具体实现方法
方法1:通过sys模块获取主模块
import sys myGlobalVariableName = "zorp" myGlobalVariableValue = "hello" # 获取当前主模块对象 main_module = sys.modules['__main__'] # 向主模块的命名空间添加全局变量 main_module.__dict__[myGlobalVariableName] = myGlobalVariableValue # 验证结果 print(zorp) # 输出: hello
方法2:直接导入__main__模块
import __main__ myGlobalVariableName = "zorp" myGlobalVariableValue = "hello" # 直接操作主模块的字典添加全局变量 __main__.__dict__[myGlobalVariableName] = myGlobalVariableValue # 验证 print(zorp) # 输出: hello
为什么这种方式更优
相比于使用exec,直接操作模块的__dict__更直观,也避免了字符串拼接可能带来的代码注入风险,同时提升了代码的可读性和可维护性。全局变量本质上就是主模块命名空间中的属性,操作模块字典就是直接修改全局命名空间。
内容的提问来源于stack exchange,提问作者Steve Newcomb
相关产品推荐
相关产品推荐

