2012-01-28 10 views
5

मैं वर्तमान में पायगैम का उपयोग कर एक छोटी सी लिपि लिख रहा हूं, लेकिन मुझे विश्वास नहीं है कि इस प्रश्न को सख्ती से पगगम से संबंधित होना चाहिए।क्या मापदंडों को संग्रहीत करने का एक और पाइथोनिक तरीका है ताकि उन्हें फ़ंक्शन कॉल में उपयोग किया जा सके?

मैं है एक वर्ग है कि समारोह मानकों का एक शब्दकोश tuples में निहित रखती है:

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

ज़रूर, यह (लिंक के लिए धन्यवाद ब्योर्न Pollex) argument list unpacking कहा जाता है:

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

कूल बन जाता है! मैं एक नामांकित ट्यूपल का उपयोग करने पर अस्पष्टता से विचार कर रहा था, लेकिन यह अभी भी बहुत verbose रास्ता लग रहा था। क्या आप कृपया बता सकते हैं कि * इस संदर्भ में चरित्र क्या करता है? मैं इस अधिसूचना से परिचित नहीं हूं। – blz

+5

इसे [तर्क-सूची-अनपॅकिंग] कहा जाता है (http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists)। –

+0

यह "splat" ऑपरेटर है। जावा में इसी प्रकार आपके पास इलिप्सिस ऑपरेटर है जो विविध तर्क लेता है और उन्हें सरणी के रूप में पास करता है, लेकिन विपरीत में। – jpsimons

संबंधित मुद्दे

 संबंधित मुद्दे