Python Language
आंशिक कार्य
खोज…
परिचय
जैसा कि आप शायद जानते हैं कि यदि आप ओओपी स्कूल से आए हैं, तो एक अमूर्त वर्ग की विशेषता है और इसका उपयोग एक अभ्यास है जिसे आपको अपना कोड लिखते समय ध्यान में रखना चाहिए।
क्या होगा यदि आप एक सार फ़ंक्शन को परिभाषित कर सकते हैं और इसके विभिन्न संस्करणों को बनाने के लिए इसे विशेषज्ञ कर सकते हैं? इसे एक प्रकार के फंक्शन इनहेरिटेंस के रूप में माना जाता है जहां आप विशिष्ट परिदृश्य के लिए उन्हें विश्वसनीय बनाने के लिए विशिष्ट पैरामंड को बांधते हैं।
वाक्य - विन्यास
- आंशिक (फ़ंक्शन, ** params_you_want_fix)
पैरामीटर
परम | विवरण |
---|---|
एक्स | उठाया जाने वाला नंबर |
y | प्रतिपादक |
बढ़ाने | समारोह विशेष के लिए |
टिप्पणियों
अजगर डॉक functools.partial में कहा गया है:
एक नई आंशिक वस्तु लौटाएं, जिसे जब कॉल किया जाएगा, तो फ़िक्शन की तरह व्यवहार किया जाएगा जिसे स्थिति संबंधी तर्कों और कीवर्ड तर्कों के कीवर्ड कहा जाता है। यदि कॉल के लिए अधिक तर्क दिए जाते हैं, तो उन्हें आर्ग्स के लिए जोड़ा जाता है। यदि अतिरिक्त कीवर्ड तर्क दिए गए हैं, तो वे कीवर्ड बढ़ाते और ओवरराइड करते हैं।
आंशिक कैसे लागू किया जा सकता है यह देखने के लिए इस लिंक को देखें।
शक्ति बढ़ाओ
मान लीजिए कि हम x को एक नंबर y तक उठाना चाहते हैं।
आप इसे इस प्रकार लिखेंगे:
def raise_power(x, y):
return x**y
क्या होगा यदि आपका y मान मानों के एक सीमित सेट को मान सकता है?
मान लीजिए कि y [3,4,5] में से एक हो सकता है और मान लीजिए कि आप अंतिम उपयोगकर्ता को ऐसे फ़ंक्शन का उपयोग करने की संभावना प्रदान नहीं करना चाहते हैं क्योंकि यह बहुत कम्प्यूटेशनल रूप से गहन है। वास्तव में आप जाँचेंगे कि क्या प्रदान किया गया है यदि y एक वैध मान रखता है और आपके कार्य को फिर से लिखता है:
def raise(x, y):
if y in (3,4,5):
return x**y
raise NumberNotInRangeException("You should provide a valid exponent")
गंदा? आइए अमूर्त रूप का उपयोग करें और इसे तीनों मामलों में विशेषज्ञता दें: आइए इन्हें आंशिक रूप से लागू करें।
from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)
यहाँ क्या हुआ? हमने y params तय किए और हमने तीन अलग-अलग कार्य परिभाषित किए।
ऊपर परिभाषित सार फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है (आप इसे निजी बना सकते हैं) लेकिन आप एक निश्चित मूल्य पर एक संख्या बढ़ाने के साथ निपटने के लिए आंशिक रूप से लागू कार्यों का उपयोग कर सकते हैं।