यदि कोई फ़ंक्शन अन्य फ़ंक्शनों को एक पैरामीटर के रूप में लेता है या एक फ़ंक्शन को आउटपुट के रूप में लौटाता है, तो उसे उच्च-क्रम फ़ंक्शन कहा जाता है। हम फ़ंक्शनों को आर्गुमेंट के रूप में पास कर सकते हैं, हम फ़ंक्शनों को लौट भी सकते हैं। यह हमें ऐसा सामान्य कोड लिखने में मदद करता है जिसे कई स्थानों पर पुन: उपयोग किया जा सकता है।
उदाहरण के लिए, sort() या sorted() एक उच्च-क्रम फ़ंक्शन है। हम इसमें key नाम का एक आर्गुमेंट पास कर सकते हैं, जो यह तय करने के लिए उपयोग किया जाएगा कि सॉर्टिंग कैसे की जाए। मान लीजिए हमारे पास ट्यूपल्स की एक लिस्ट है और हम उस लिस्ट को ट्यूपल्स के तत्वों के योग के आधार पर सॉर्ट करना चाहते हैं:
यहां, हमने एक लैम्ब्डा फ़ंक्शन पास किया है जो एक एकल तत्व को आर्गुमेंट के रूप में लेता है और वह मूल्य लौटाता है जिसके अनुसार उसे सॉर्ट किया जाना चाहिए।
हम अपना स्वयं का उच्च-क्रम फ़ंक्शन भी परिभाषित कर सकते हैं:
फ़ंक्शन do() में 3 आर्गुमेंट हैं - पहला नंबर num1, दूसरा नंबर num2, और वह ऑपरेशन जो इन नंबरों पर किया जाना है। पहले कॉल में, हम फ़ंक्शन को जोड़ करने के लिए कहते हैं, दूसरे में घटाव, और अंतिम में गुणा।
चुनौती
n ट्रिपलेट्स की एक लिस्ट दी गई है, आपको उन ट्रिपलेट्स को उनके योग के आधार पर सॉर्ट करना है। तो अंतिम लिस्ट में, यदि हम ट्रिपलेट्स के योग को देखें, तो परिणाम एक गैर-घटते क्रम में होगा।
इनपुट की पहली पंक्ति में एक एकल पूर्णांक n है - ट्रिपलेट्स की संख्या। अगली n पंक्तियों में 3 स्पेस से अलग किए गए पूर्णांक हैं।
प्रोग्राम को n पंक्तियों को प्रिंट करना चाहिए - ट्रिपलेट्स की परिणामी लिस्ट। प्रत्येक पंक्ति में 3 स्पेस से अलग की गई संख्याएँ होनी चाहिए। यदि दो ट्रिपलेट्स का योग समान है, तो जो पहले इनपुट में आया है, वह आउटपुट में भी पहले आना चाहिए (sort और sorted फ़ंक्शन इस क्रम को बनाए रखते हैं - इसे स्थिर सॉर्टिंग कहा जाता है)।