2012-01-28 7 views
5

私は現在、pygameを使って小さなスクリプトを書いていますが、pygameと厳密に関連しているとは思えません。関数呼び出しで使うことができるように、パラメータを格納するもっと無限の方法はありますか?

私はタプルに含まれる関数パラメータの辞書を保持しているクラスがあります。

def action(self, stimType): 
    pygame.draw.rect(self.stim[stimType][0], self.stim[stimType][1], self.stim[stimType][2]) 
:同じクラスで

self.stim = {1:(firstParam, secondparam, thirdparam), 
      2:(firstParam2, secondparam2, thirdparam2), 
      3:(firstParam3, secondParam3, thirdParam3)} 

を、私は、これらのパラメータを使用して、別の関数の呼び出しを発行する機能を持っています

これは機能しますが、読むのはちょっと醜いです。私は、これらのパラメータを格納するよりエレガントな方法があるかどうか疑問に思っていました。

ありがとうございます!

答えて

12

それはargument list unpacking(リンクのおかげでビョルンPollex)と呼ばれ、確かに:

def action(self, stimType): 
    pygame.draw.rect(*self.stim[stimType]) 

そして、あなたは、特定の理由でのdictを使用していない場合は、その後、異なる引数の収集のためのタプルが良いです最適とよりpeformant:

self.stim = (
    (firstParam, secondparam, thirdparam), 
    (firstParam2, secondparam2, thirdparam2), 
    (firstParam3, secondParam3, thirdParam3) 
) 

だけインデックスが今0から始まることに注意してください:self.stim[stimType]self.stim[stimType-1]

+0

クールになります!名前付きタプルの使用を漠然と考えていましたが、やはり冗長すぎるようでした。あなたは*文字がこの文脈で何をしているか説明してください。私はこの表記に慣れていない。 – blz

+5

これは[argument-list-unpacking](http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists)と呼ばれています。 –

+0

これは「スプラット」演算子です。 Javaの場合と同様に、変数の引数をとり、それらを配列として渡しますが、逆のような省略演算子をどのように持っていますか? – jpsimons

関連する問題