如何将字符串转换为已声明的变量名并实现赋值?
问题:将字符串转换为已声明变量并完成赋值
需求是把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
相关产品推荐
相关产品推荐

