You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以变量值为名称创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:54:59