2016-05-23 9 views
2

私はこの質問が以前に聞かれたに違いないと思うが、私はそれを見つけることができなかったと思う。さまざまなkwargsを繰り返し処理する方法は?

私のような異なる引数を持つ関数があります。

私は私の(強制)の引数が定義されていると仮定し
def f(arg1, arg2, ...,argN, kw1=0, kw2=0, kw3=0): 
    # some code ... 

arg1 = some_value_1 
arg2 = some_value_2 
... 
argN = some_value_N 

私は

f(arg1, arg2, ... argN, kw1=1) 
f(arg1, arg2, ... argN, kw1=23) 
f(arg1, arg2, ... argN, kw2=456) 
f(arg1, arg2, ... argN, kw2=789) 
f(arg1, arg2, ... argN, kw3='a') 
f(arg1, arg2, ... argN, kw3='b') 
... 
のようないくつかの繰り返しの関数呼び出しを凝縮したいが

次のようになります。

for kw_def in [kw1=1, kw1=23, kw2=456, kw2=789, kw3='a', kw3='b',...]: 
    f(arg1, arg2, ... argN, kw_def) 

しかし、構文的には正しい。それを行うのはどういう意味ですか?

答えて

6

使用辞書:

for kw_def in [ 
    {'kw1': 1}, 
    {'kw1': 23}, 
    {'kw2': 456}, 
]: 
    f(arg1, ..., argN, **kw_def) 
2

使用partial functions

def f(arg1, arg2, arg3, kw1, kw2, kw3): 
    pass 

あなたはこのようなarg1arg2kw1kw2のための共通の値を持つ呼び出し短縮できます:f_shortにこの呼び出し

from functools import partial 
f_short = partial(f, 1, 2, kw1="A", kw2="B") 
f_short(3, kw3="C") 

をあなたがこのシグネチャと機能を持っていると仮定すると

以下の直接呼び出しと同等です:

f(1, 2, 3, kw1="A", kw2="B", kw3="C") 
関連する問題