Python如何通过存储变量名的变量修改对应原变量的值
问题解决方法
核心问题排查
你之前所有尝试失败的根本原因是初始赋值逻辑错误:你写的variable2 = variable1是把variable1的数值(也就是1)赋值给variable2,并没有存储variable1的变量名。要实现你的需求,首先需要把variable1的变量名作为字符串存入variable2,也就是写variable2 = "variable1"。
全局作用域解决方案
如果你的变量都定义在全局作用域,直接操作globals()字典即可,这是性能最好、最稳定的方案,不需要额外创建自定义字典:
# 初始正确赋值 variable1 = 1 variable2 = "variable1" # 用户输入变量名后赋值操作 globals()[variable2] = 5 print(variable1) # 输出结果为5,符合预期
函数内部作用域解决方案
如果你要操作的是函数内的局部变量,Python的locals()字典是只读的,修改不会同步到实际局部变量,此时用exec即可,注意不要给数值加多余的引号:
def assign_user_var(): # 函数内原有变量 variable1 = 1 # 假设variable2是用户输入的变量名字符串 variable2 = "variable1" # 执行赋值 exec(f"{variable2} = 5") print(variable1) # 输出结果为5 assign_user_var()
适配你的业务场景说明
你提到有20+随机命名的变量、要保留现有locals里的变量,以上两种方案都不需要额外创建自定义字典存储变量,完全兼容你现有的代码结构。只需要确保接收用户输入的变量存储的是字符串类型的变量名即可。
你之前尝试失败的其他原因
locals()[variable2] = 5:如果在函数内部执行,locals()修改不会生效,只有全局作用域下locals()和globals()指向同一个对象时才会生效exec(f"{variable2} = '{5}'")写法给5加了单引号,会把变量赋值为字符串'5'而非数值5,不符合需求
内容的提问来源于stack exchange,提问作者Tequin Lake
相关产品推荐
相关产品推荐

