【发布时间】:2015-09-07 13:39:14
【问题描述】:
我正在尝试找到一种使用字符串替换来调用变量以设置其值的良好且安全的方法。这是一个更最佳的做法,我正在寻找最好的方法来做到这一点。
首先,使用字典或类似结构不是我想要的。我想设置一个变量的值!
示例;
def test_my_var(name_param, val):
# Set initial values for each variable
my_var_1 = -1
my_var_2 = -1
my_var_3 = -1
...
my_var_n = -1
# Now I will update the value of mth variable
my_var_%{name_param}s = val # Of course this will not work!!
# Now print the new value of this variable
print my_var_%{name_param}s
我正在寻找一种实用的方法来实现这一点。经过测试但不起作用的事情是:
我不想将我的变量保留在 dict 或类似结构中。它们是函数内部的局部变量,应该保持原样。
我不喜欢使用 exec,因为它会执行任何发送的命令!所以下面不是一个好方法,也不是一个有效的方法。
def test_case(index, val):
var_1 = -1
var_2 = -1
exec("var_%s" = %s % (index, val))
print eval("var_%s" % index)
测试了使用locals() 和设置值的方法,但没有这样做
def test_case(index, val):
val_1 = -1
val_2 = -1
print locals()["val_%s" % index]
locals()["val_%s" % index] = val
print val_1, val_2 # That will not update the calue of the variable `val_1` or any other variable
所以我正在寻找一种聪明的方法来更改变量的值,其中变量名称将表示为字符串替换。
【问题讨论】:
-
你不能通过
locals()改变本地人;它只是一个反射,而不是一个活的物体。 -
你说你不想用字典,但为什么不用列表呢?
-
而字典也是一个本地对象。只是一个您可以通过字符串处理值的方法。您对必须使用当地人而不使用
exec的限制让您画在一个人造角落。你不能在你设定的限制内做你想做的事。 -
换句话说:smart 方法是不使用本地人。使用字典。
-
@FallenAngel:这是不可能的。
标签: python python-2.7