2017-10-28 123 views
0

我有一个变量名的列表:Python的 - 使用变量名作为输入列表功能

['var1', 'var2', 'var3'] 

我如何可以使用字符串变量名作为变量的函数吗?

例子:

使用变量列表为:

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

你不应该这样做。将变量放在字典中,而不是'd = {'var1':arr1,'var2':arr2,'var3':arr3}' – Psidom

+0

你从哪里得到一个变量名列表? – chepner

+0

我使用列表创建要素的子集(不同和独特的要素组合) – Raff

回答

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"

0

要做到这一点,你需要使用***操作

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

而同样的作品与类型的字典

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可能会打破它。我认为这种代码风格并不容易阅读。所以在大多数情况下,我建议你去寻找另一种方法。按照第一条评论的建议,将某些结构(字典或对象)中的所有变量组合起来可能会好得多。但我不能说它会工作,因为我没有看到你的代码。