You need to enable JavaScript to run this app. Python如何通过存储变量名的变量修改对应原变量的值
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 06:06:10