我有一个函数f(x)
,其中创建了许多局部变量。 x
是一个与这些局部变量之一具有相同名称的字符串,我想通过更改x
来更改此局部变量。干净的方法是什么?目前我正在使用大量if/elif
语句。
代表我的问题的一些虚拟代码:
def f(x):
a = [1,2,3]
b = [2,3,4]
c = [3,4,5]
if x == "a":
a[0] = 10
elif x == "b":
b[0] = 10
elif x == "c":
c[0] = 10
return a,b,c
我想让正确的变量改变值,但是如果/ elif语句感觉有点多余,那么使用所有这些。
答案 0 :(得分:4)
dict
简单地说,使用dict:
def f(x):
values = {
"a": [1,2,3],
"b": [2,3,4],
"c": [3,4,5]
}
values[x][0] = 10
return values["a"], values["b"], values["c"]
如果真的非常想要,请使用原始代码并执行locals()[x][0] = 10
,但这并不是真的值得推荐,因为如果参数是您不喜欢的其他变量的名称,可能会导致不必要的问题不想改变。
答案 1 :(得分:3)
使用这样的字典:
def f(x):
d = {"a" :[1,2,3],"b" : [2,3,4],"c" : [3,4,5]}
d[x][0] = 10
return d
答案 2 :(得分:1)
如果您的输入是一个字符串,并且您想引用与该字符串匹配的变量,则可以使用globals()
,如下所示:
globals()['x']
这样您就可以获取值和/或编辑其内容。
答案 3 :(得分:-1)
您可以使用
放入参数中exec()
并将您的代码作为字符串
def f(x):
a = [1,2,3]
b = [2,3,4]
c = [3,4,5]
exec(x + "[0] = 10")
return a,b,c
print f("a")
# ([10, 2, 3], [2, 3, 4], [3, 4, 5])