我有一個變量名的列表:Python的 - 使用變量名作爲輸入列表功能
['var1', 'var2', 'var3']
我如何可以使用字符串變量名作爲變量的函數嗎?
例子:
使用變量列表爲:
x = np.concatenate((var1, var2, var3), axis = 1)
我有一個變量名的列表:Python的 - 使用變量名作爲輸入列表功能
['var1', 'var2', 'var3']
我如何可以使用字符串變量名作爲變量的函數嗎?
例子:
使用變量列表爲:
x = np.concatenate((var1, var2, var3), axis = 1)
您可以使用**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_function
,var1
,var2
和var3
店鋪"someval1"
,"someval2"
,"someval3"
要做到這一點,你需要使用*
或**
操作
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可能會打破它。我認爲這種代碼風格並不容易閱讀。所以在大多數情況下,我建議你去尋找另一種方法。按照第一條評論的建議,將某些結構(字典或對象)中的所有變量組合起來可能會好得多。但我不能說它會工作,因爲我沒有看到你的代碼。
你不應該這樣做。將變量放在字典中,而不是'd = {'var1':arr1,'var2':arr2,'var3':arr3}' – Psidom
你從哪裏得到一個變量名列表? – chepner
我使用列表創建要素的子集(不同和獨特的要素組合) – Raff