2012-10-08 19 views
13

यदि कोई फ़ंक्शन तर्कों की संख्या लेता है, और एक और फ़ंक्शन है जो आइटमों की संख्या के साथ अनुक्रम देता है (या मेरे पास आइटम की संख्या के साथ अनुक्रम है), तो 'मानचित्र' का कोई तरीका है इन दो कार्यों (या पहला कार्य इनपुट और रिटर्न परिणाम के रूप में आइटमों की संख्या की अनुक्रम लेते हैं) मैं स्वयं को फ़ंक्शन को संपादित करने और इसके तर्क पैरामीटर को बदलने और वापस करने के लिए नहीं चाहता (और शायद कुछ मौकों में नहीं) मूल्य प्रकारअनपॅकिंग फ़ंक्शन तर्क

यानी)

def func1(x, y, z): 
    return x+y+z 

def func2(w): 
    return [i for i in range(w,w+3)] 

इस मामले में नहीं कर सकते func1(func2(...))

उत्तर

14

आप *args तर्क वाक्य रचना के लिए देख रहे हैं:

>>> def foo(bar, baz, spam): 
...  print bar, baz, spam 
... 
>>> arguments = [1, 2, 3] 
>>> foo(*arguments) 
1, 2, 3 

जब एक प्रतिदेय तर्क गुजर, किसी भी अभिव्यक्ति एक * asterix से पहले, स्थितीय तर्कों के एक दृश्य के रूप में व्याख्या की है, और पारित किया जा करने के लिए विस्तारित बुलाए गए ऑब्जेक्ट (फ़ंक्शन, विधि इत्यादि) के लिए अलग-अलग तर्क के रूप में।

अपने उदाहरण है कि हो सकता है के लिए:

func1(*func2(...)) 

खोजशब्द ** डबल asterixes (एक मानचित्रण लेता है) का उपयोग कर के बराबर है, और तुम भी समारोह हस्ताक्षर में एक ही वाक्य विन्यास का उपयोग कर सकते हैं।

documentation on call expressions देखें, और फ़ंक्शन हस्ताक्षर दर्पण वाक्यविन्यास के लिए, documentation on function definitions

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