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

如何将字符串转换为已声明的变量名并实现赋值?

问题:将字符串转换为已声明变量并完成赋值

需求是把gettext返回的字符串(比如"rags")转换成已声明的同名变量,再用这个变量给player.armor赋值。现有代码如下:

获取字符串的代码:

gt = gettext("playerarmor", 1, 1)
for i in armorlist:
    if i == gt:
        player.armor = i

gettext函数实现:

def gettext(header, move, count):
    with open('dictionary.txt', 'r') as f:
        f = f.read()
        lines = f.split("\n")

    for i, line in enumerate(lines):
        if header in line:
            word = []
            for l in range(0, count):
                newindex = i + move
                word.append(lines[newindex+l])

            return "\n".join(word)

现在gettext返回字符串"rags",而rags是已声明的变量,需要把这个字符串对应到变量本身。


解决方案

方法1:使用全局/局部变量字典(简单但风险较高)

Python中可以通过globals()或locals()获取当前作用域的变量字典,直接通过字符串键取值:

修改后的赋值代码:

gt = gettext("playerarmor", 1, 1)
# 从全局变量中获取对应字符串的变量值
target_armor = globals().get(gt)
if target_armor in armorlist:
    player.armor = target_armor

注意:如果rags是局部变量,就用locals().get(gt);这种方法的缺点是如果字符串对应不存在的变量,会返回None,而且直接操作全局/局部变量可能引发意外问题,不推荐在复杂项目中使用。

方法2:用字典映射变量(推荐,更安全可控)

把所有护甲变量统一存到一个字典里,通过字符串键来获取对应值,这是更规范的做法:

# 先把所有护甲变量放到字典中
armor_vars = {
    "rags": rags,
    "leather_armor": leather_armor,
    # 其他护甲变量...
}

gt = gettext("playerarmor", 1, 1)
target_armor = armor_vars.get(gt)
if target_armor and target_armor in armorlist:
    player.armor = target_armor

这种方法可以明确控制哪些变量能被访问,避免了全局变量的风险,也更容易维护和调试。

方法3:直接在armorlist中存储字符串与变量的映射

如果armorlist本身可以调整结构,也可以把它改成包含(字符串标识,变量值)的列表:

armorlist = [
    ("rags", rags),
    ("leather_armor", leather_armor),
    # ...
]

gt = gettext("playerarmor", 1, 1)
for name, armor in armorlist:
    if name == gt:
        player.armor = armor
        break

这样直接通过字符串匹配找到对应的变量值,逻辑更清晰。


内容的提问来源于stack exchange,提问作者Astro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:24:32