2017-10-28 103 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可能會打破它。我認爲這種代碼風格並不容易閱讀。所以在大多數情況下,我建議你去尋找另一種方法。按照第一條評論的建議,將某些結構(字典或對象)中的所有變量組合起來可能會好得多。但我不能說它會工作,因爲我沒有看到你的代碼。