2017-10-28 8 views
0

のための入力として変数名のリストを使用し、私は変数名のリストを持っている:Pythonの - 機能

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

は、どのように私は関数内の変数として文字列変数名を使用できますか?

例:あなたは**kwargsを使用することができます

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

これは実行しないでください。 'd = {'var1':arr1、 'var2':arr2、 'var3':arr3}' – Psidom

+0

の代わりに変数を辞書に入れてください。 – chepner

+0

私はリストを使用して、機能のサブセット(機能の異なる組み合わせ)を作成し、 – Raff

答えて

0

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_functionvar1var2、そしてvar3

のためにリスト内の変数を使用します店舗"someval1""someval2"、これを実現するために210

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 object(list、dictまたはstr)を使用するという考え方です。

ですから、だから、これであなたは

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

NOTE

このコードは壊れやすいなります置き換えることができタプル

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

を構築するためにそれをすべてを組み合わせることができます - 移動しますそれの一部が別の機能に壊れているかもしれません。そして、私はこのコードスタイルは読みにくいと思います。だから、ほとんどの場合、別のアプローチを探すことをお勧めします。最初のコメントで示唆されているように、いくつかの構造体(dictまたはobject)のすべての変数を組み合わせるほうがずっと良いかもしれません。しかし、私はあなたのコード全体を見ることができないので、それがうまくいくとは言えません。