2011-08-10 9 views
1

私は私の関数に引数のリストを与えるための最良の方法を探しています:Python関数の長いパラメータリスト

def myFunc(*args): 
    retVal=[] 
    for arg in args: 
     retVal.append(arg+1) 
    return "test",retVal 

問題は、あなたがにパラメータの長いリストを持っている場合、それは非常に迷惑になることですパラメータのリスト全体を2回書く必要があるため、関数に渡す必要があります。完全な名前を持つパラメータが10個以上ある場合は、実際に重くなります。

w=alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota 
test,w=myFunc(w) 

しかし、私は何をする必要があり土台:

test,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota=myFunc(alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota) 

は、だから私はこのような何かについて考え

alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota=w 

はのリストを与えると戻って取得する任意の短い方法はありますパラメータを関数から取得します。 パラメータを直接変更するための関数へのポインタを与えますか?単に関数が辞書を返すよう

w=alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota 
test,w=myFunc(w) 

# And directly get my parameters modified to be able to print them : 
print alpha,[...],iota 

答えて

3

これは私が探しているものです。その後、myFunc(**yourdict)を使って呼び出すことができます.Dict項目を引数として使用することができます。return yourdictの場合、同じdict(おそらく変更された値)を返すか、元のdictを変更してまったく返しません。

+0

チップをありがとう。あなたのアイデアに従ったのは以下のとおりです: 'アルファ、ベータ、ガンマ、デルタ、イプシロン、ゼータ、イータ、シータ、イータ= 1,2,3,4,5,6,7,8,9 dict = {'アルファ'、アルファ、ベータ、ベータ、ガンマ、ガンマ、デルタ、デルタ、イプシロン、イプシロン、ゼータ、ゼータ、エタ、エタ、 'イオタ':イオタ} のdict = myFuncという(** dictの) ' そして、これは私の新しい機能である: 'デフmyFuncという(**辞書):引数のための RETVAL = [] dict: dict [arg] = dict [arg] +1 return dict' ありがとうございました! – Mibou

+0

1.辞書の名前として 'dict'を使用しないでください。これは' dict'と呼ばれる実際のクラスよりも優先されます。 2. 'd = dict(alpha = alpha、beta = beta、...)'のようなキーワードを使ってdictを定義することができます。これは引用符とコロンのシフトキーの使用をたくさん節約します。 – kindall

5

つのオプション:

  1. は、複数の機能の中にロジックを分割することによって引数の数を減らしてみてください。

  2. 1.)が不可能な場合は、すべての引数をカプセル化して1つの引数を辞書として使用できます。これは、柔軟性(関数のシグネチャは、パラメータを取り除いたり追加した場合でも同じままです。)、大部分は解読可能な解(辞書の意味のあるキー)になります。

+1

+1は機能を分割します。長いパラメータリストは[code smell](http://www.codinghorror.com/blog/2006/05/code-smells.html)です。 – senderle

関連する問題