उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर
डेकोरेटर्स
डेकोरेटर्स की श्रृंखला
उद्देश्य
डेकोरेटर्स को चेन करके छत को रंगीन झंडों से सजाएं।
किचन में इतने लंबे समय तक बंद रहने के बाद छत पर कुछ ताजी हवा है, और कुछ लाइनों में झंडे नहीं हैं। यदि आप यहां हैं तो उन्हें सेट करना अच्छा रहेगा, हालांकि यह मुश्किल हो सकता है क्योंकि एक लाइन सेट करने के लिए आपको विभिन्न झंडों की आवश्यकता होती है। आप यह काम डेकोरेटर्स को चेन करके कर सकते हैं.
डेकोरेटर्स को @ चिन्हों को दुगुना करके चेन किया जाता है, अर्थात एकल फ़ंक्शन पर कई डेकोरेटर्स लगाना। उदाहरण के लिए, इससे आप एक फ़ंक्शन को दो डेकोरेटर फ़ंक्शनों के बीच में रख सकते हैं:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
ऊपर का कोड चेन किए गए डेकोरेटर्स के साथ एक फ़ंक्शन को दर्शाता है। इन डेकोरेटर्स को इस प्रकार फ़ंक्शन में बुना गया है कि लाइन के बाहरी किनारों पर नीले झंडे लगाए जाते हैं, आंतरिक परत में लाल झंडे लगाए जाते हैं और अंत में बीच में एक हरा झंडा रखा जाता है। ये सभी एक सूची line में जोड़े जाते हैं, यही विधि लाइन पर झण्डे सेट करने के लिए उपयोग की जाएगी.
सबसे पहले सुनहरे X निशान पर जाएँ और read() फ़ंक्शन का उपयोग करके संकेत स्तम्भ पर दिए गए निर्देशों की जाँच करें। यहाँ यह आपको बताएगा कि किस जगह किस प्रकार के झण्डे लगाने हैं, जहाँ तीन (3) विभिन्न प्रकार के रंगीन झण्डे होते हैं: "red", "green" और "blue". प्रत्येक लाइन में सभी तीन झण्डे होंगे - एक (1) बीच में, दो (2) आंतरिक लाइन में और दो (2) बाहरी लाइन में, जिससे प्रत्येक लाइन में कुल पाँच (5) झण्डे बनते हैं, बिलकुल नक्शे के निचले बाएँ कोने में पहले से बनी लाइन की तरह.
हल्के X निशान तक जाएँ और क्रेट में मौजूद "flags" को उठाने के लिए collect() फ़ंक्शन का उपयोग करें। इसके बाद अंधेरे X निशानों तक जाएँ और बाएं से दाएं उस क्रम में झण्डे लगाना शुरू करें जैसा कि आपने पहले पढ़े हुए निर्देशों में वर्णित किया था। इसे प्राप्त करने के लिए मध्य फ़ंक्शनों का उपयोग करें, उदाहरण के लिए: middle_green() एक झण्डा लाइन इस प्रकार बनाता है: ["blue", "red", "green" ,"red","blue" ]. फिर place() फ़ंक्शन का उपयोग करके line सूची के साथ लाइन को सेट करें, इस प्रकार: place(line).
प्रत्येक X निशान के बीच line सूची को clear() फ़ंक्शन का उपयोग करके खाली करें, इस प्रकार: line.clear(), जिससे आपको हर लाइन के लिए नई सूची बनाने की आवश्यकता न पड़े और आप सूची का पुन: उपयोग कर सकें। दाएं तरफ का अंतिम X निशान एक कस्टम फ़ंक्शन की मांग करता है:
@
@
def middle_custom():
line.append( Insert append )
player.speak("%s flag has been added to the line"
% ( insert flag ))
फ़ंक्शन में डेकोरेटर्स जोड़ने के लिए दो @ चिन्हों का उपयोग करें, इसके बाद लाइन में append और झण्डे के रंग को स्ट्रिंग में भरें। स्तर को पूरा करने के लिए संकेत पर दिए निर्देशों के अनुसार ऐसा करें।