Python:将变量名称作为参数传递

时间:2017-09-26 14:39:25

标签: python

我有一个函数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语句感觉有点多余,那么使用所有这些。

4 个答案:

答案 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])