Python - 使用带有变量名称的列表作为函数的输入

时间:2017-10-28 15:28:17

标签: python list function variables

我有一个包含变量名称的列表:

x = np.concatenate((var1, var2, var3), axis = 1)

如何在函数中使用字符串变量名作为变量?

示例:

使用列表中的变量:

 application.idleTimerDisabled = true

2 个答案:

答案 0 :(得分:0)

您可以使用**kwargs

def some_function(**kwargs):
    var1 = kwargs.get('var1')
    var2 = kwargs.get('var2')
    var3 = kwargs.get('var3')

s = ['var1', 'var2', 'var3']
vals = ["someval1", "someval2", "someval3"]
some_function(**{a:b for a, b in zip(s, vals)})

现在,在函数some_functionvar1var2var3存储"someval1""someval2""someval3"

答案 1 :(得分:0)

要实现此目的,您需要使用***运算符

my_func(*[a, b])
# equals to
my_func(a, b)

同样适用于dicts

my_func(**{'p1': a, 'p2': b})
# equals to
my_func(p1=a, p2=b)

您需要的第二件事是通过它的名称来获取变量。 Python有可能这样做,但它取决于变量的存储位置。

如果它是对象属性:

my_obj.var
# can be 
getattr(my_obj, 'var')

对于局部变量:

my_var
locals()['my_var']

locals为您提供dict的所有局部变量。还有一个类似的globals函数。

到目前为止,上面的例子都没用,但是想法是你使用python对象(list,dict或str)而不是写下变量名本身。

所以你可以将它们组合起来构建一个元组

def my_func():
  var1, var2, var3, var4 = range(10, 14)
  vars = ['var1', 'var2', 'var3']
  loc = locals()  # var1 - var4 and vars are available as dict now
  tpl = tuple(loc[k] for k in vars)
  print(tpl)
  print(tuple([var1, var2, var3]))

因此,您可以替换

x = np.concatenate((var1, var2, var3), axis = 1)
# to
x = np.concatenate(tpl, axis=1)

注意

此代码将脆弱 - 将其移动到另一个func可能会破坏它。我认为这种代码风格不容易阅读。因此,在大多数情况下,我建议您搜索其他方法。如第一条评论中所建议的那样组合某些结构(字典或对象)中的所有变量可能会好得多。但我不能说它会起作用,因为我看不到你的整个代码。