पायथन एक बहुमुखी और सुलभ भाषा है, जो इसे शुरुआती लोगों के लिए एक लोकप्रिय विकल्प बनाती है। हालाँकि, यह उन्नत सुविधाएँ भी प्रदान करता है जो पहली बार में जटिल लग सकती हैं। कुशल, रखरखाव योग्य और निष्पादन योग्य पायथन कोड लिखने के लिए इन जटिल अवधारणाओं को समझना आवश्यक है।
इस लेख में, हम पायथन में कुछ अधिक जटिल धारणाओं का पता लगाएंगे, जैसे जनरेटर, डेकोरेटर, संदर्भ प्रबंधक, लैम्ब्डा एक्सप्रेशन और मेटाक्लास। हम उनका उपयोग कब करना है इसके बारे में पूछे जाने वाले प्रश्नों पर चर्चा करेंगे और उनके उपयोग को स्पष्ट करने के लिए कोड उदाहरण प्रदान करेंगे।
जनरेटर क्या है?
जेनरेटर एक फ़ंक्शन है जो आपको यील्ड कीवर्ड का उपयोग करके एक कस्टम इटरेटर बनाने की अनुमति देता है। एकल मान लौटाने के बजाय, जनरेटर पुनरावृत्त होते समय मानों की एक श्रृंखला उत्पन्न करता है।
इसका उपयोग कब करें?
जब आप बड़े डेटा अनुक्रमों के साथ काम कर रहे हों और मेमोरी सहेजना चाहते हों।
जब आपको आलसी गणना की आवश्यकता होती है, यानी आप पहले से सभी मानों की गणना नहीं करना चाहते हैं।
अनंत या संभावित अनंत डेटा स्ट्रीम बनाने के लिए।
उदाहरण कोड
def compteur_infini(): n = 0 while True: yield n n = 1 # Utilisation compteur = compteur_infini() print(next(compteur)) # Sortie: 0 print(next(compteur)) # Sortie: 1 print(next(compteur)) # Sortie: 2
यह काम क्यों करता है?
नेक्स्ट(काउंटर) पर प्रत्येक कॉल अगले यील्ड स्टेटमेंट तक फ़ंक्शन को निष्पादित करती है, मान लौटाती है और अगली कॉल तक फ़ंक्शन स्थिति को निलंबित कर देती है।
डेकोरेटर क्या है?
डेकोरेटर एक ऐसा फ़ंक्शन है जो आपको किसी अन्य फ़ंक्शन या विधि के स्रोत कोड को बदले बिना उसके व्यवहार को संशोधित या समृद्ध करने की अनुमति देता है। यह एक फ़ंक्शन को इनपुट के रूप में लेता है, उसमें कार्यक्षमता जोड़ता है, और एक नया फ़ंक्शन लौटाता है।
इसका उपयोग कब करें?
अतिरिक्त कोड (लॉगिंग, एक्सेस कंट्रोल, टाइमआउट) के साथ कार्यों को समृद्ध करने के लिए।
जब कई कार्यों के लिए समान व्यवहार की आवश्यकता होती है तो कोड दोहराव से बचने के लिए।
चिंताओं को अलग करने के लिए, मुख्य कोड को साफ़ रखें।
उदाहरण कोड
def journalisation(func): def wrapper(*args, **kwargs): print(f"Appel de {func.__name__} avec {args} {kwargs}") result = func(*args, **kwargs) print(f"{func.__name__} a retourné {result}") return result return wrapper @journalisation def addition(a, b): return a b # Utilisation resultat = addition(5, 3) # Sortie: # Appel de addition avec (5, 3) {} # addition a retourné 8
यह काम क्यों करता है?
लॉगिंग डेकोरेटर ऐड फ़ंक्शन को लपेटता है, निष्पादित होने से पहले और बाद में संदेश जोड़ता है।
संदर्भ प्रबंधक क्या है?
एक संदर्भ प्रबंधक एक संरचना है जो आपको संसाधनों (फ़ाइलें, कनेक्शन आदि) को प्रबंधित करने की अनुमति देता है, यह सुनिश्चित करके कि वे सही ढंग से प्रारंभ और साफ किए गए हैं। यह enter और exit तरीकों का उपयोग करता है और आम तौर पर with स्टेटमेंट के साथ उपयोग किया जाता है।
इसका उपयोग कब करें?
उन संसाधनों को प्रबंधित करने के लिए जिन्हें सफ़ाई की आवश्यकता है (फ़ाइल बंद करें, कनेक्शन जारी करें)।
यह सुनिश्चित करने के लिए कि अपवाद संसाधन सफ़ाई को न रोकें।
संसाधनों का प्रबंधन करते समय कोड पठनीयता में सुधार करना।
उदाहरण कोड
class GestionFichier: def __init__(self, nom_fichier, mode): self.nom_fichier = nom_fichier self.mode = mode self.fichier = None def __enter__(self): self.fichier = open(self.nom_fichier, self.mode) return self.fichier def __exit__(self, exc_type, exc_val, exc_tb): if self.fichier: self.fichier.close() # Utilisation with GestionFichier('test.txt', 'w') as f: f.write('Bonjour, monde!')
यह काम क्यों करता है?
संदर्भ प्रबंधक यह सुनिश्चित करता है कि फ़ाइल स्वचालित रूप से बंद हो जाए, भले ही लेखन के दौरान कोई अपवाद हो।
लैम्ब्डा एक्सप्रेशन क्या है?
लैम्ब्डा अभिव्यक्ति लैम्ब्डा कीवर्ड के साथ परिभाषित एक अज्ञात फ़ंक्शन है। इसमें कई तर्क हो सकते हैं लेकिन इसमें केवल एक ही अभिव्यक्ति हो सकती है।
इसका उपयोग कब करें?
त्वरित और आसान फ़ंक्शन बनाने के लिए, आमतौर पर किसी अन्य फ़ंक्शन के तर्क के रूप में।
जब एक साधारण कार्य के लिए पूर्ण फ़ंक्शन परिभाषा अत्यधिक शब्दाडंबरपूर्ण होगी।
डेटा संरचनाओं में सरल गणना के लिए।
उदाहरण कोड
# Liste de nombres nombres = [1, 2, 3, 4, 5] # Utilisation de lambda pour doubler les nombres doubles = list(map(lambda x: x * 2, nombres)) print(doubles) # Sortie: [2, 4, 6, 8, 10]
यह काम क्यों करता है?
एक्सप्रेशन लैम्ब्डा लैम्ब्डा x:x*2 को मैप में पास किया जाता है, जो इसे सूची में प्रत्येक तत्व पर लागू करता है।
इसका उपयोग कब करें?
कक्षाओं के निर्माण को संशोधित करने के लिए, उदाहरण के लिए कक्षाओं को सहेजकर या उन्हें संशोधित करके।
गतिशील वर्ग संशोधनों की आवश्यकता वाले सिंगलटन, ओआरएम, या फ्रेमवर्क को लागू करने के लिए।
जब कक्षा सज्जाकार नियंत्रण के वांछित स्तर के लिए पर्याप्त नहीं हैं।
उदाहरण कोड
class EnregistrementClasses(type): registre = {} def __new__(cls, name, bases, attrs): new_class = super().__new__(cls, name, bases, attrs) cls.registre[name] = new_class return new_class class MonObjet(metaclass=EnregistrementClasses): pass class MonAutreObjet(MonObjet): pass # Utilisation print(EnregistrementClasses.registre) # Sortie: {'MonObjet':, 'MonAutreObjet': }
यह काम क्यों करता है?
रजिस्टरक्लास मेटाक्लास रजिस्ट्री में बनाए गए प्रत्येक वर्ग को सहेजने के लिए नई विधि को संशोधित करता है।
पायथन में जटिल धारणाएं, जैसे जनरेटर, डेकोरेटर, संदर्भ प्रबंधक, लैम्ब्डा एक्सप्रेशन और मेटाक्लास, अनुभवी डेवलपर्स के लिए काफी शक्ति और लचीलापन प्रदान करते हैं। यह समझकर कि उनका उपयोग कब और कैसे करना है, आप अधिक कुशल, पठनीय और रखरखाव योग्य कोड लिख सकते हैं।
जब आप किसी जटिल समस्या का सामना करें, तो अपने आप से निम्नलिखित प्रश्न पूछें:
क्या मुझे संसाधनों को सुरक्षित रूप से प्रबंधित करने की आवश्यकता है? (संदर्भ प्रबंधक)
क्या मुझे आलसी गणनाओं से लाभ हो सकता है? (जनरेटर)
क्या मैं किसी फ़ंक्शन को संशोधित किए बिना उसके व्यवहार को समृद्ध कर सकता हूं? (सजावटकर्ता)
क्या मुझे एकमुश्त परिचालन के लिए सरल कार्यों की आवश्यकता है? (लैम्ब्डा एक्सप्रेशंस)
क्या मुझे कक्षाओं के निर्माण को नियंत्रित करना चाहिए? (मेटाक्लासेस)
इन प्रश्नों का उत्तर देकर, आप यह निर्धारित कर सकते हैं कि इनमें से कोई भी जटिल अवधारणा आपकी स्थिति के लिए उपयुक्त है या नहीं।
पुस्तकें:
लुसियानो रामाल्हो द्वारा फ़्लुएंट पायथन।
ब्रेट स्लेटकिन द्वारा प्रभावी पायथन।
आधिकारिक दस्तावेज:
जेनरेटर
सज्जाकार
प्रसंग प्रबंधक
लैम्ब्डा अभिव्यक्ति
मेटाक्लासेस
ट्यूटोरियल:
पायथन में जेनरेटर को समझना
पायथन के लिए डेकोरेटर्स गाइड
संदर्भ प्रबंधकों का उपयोग करना
पढ़ने के लिए धन्यवाद! बेझिझक अपने अनुभव साझा करें या टिप्पणियों में प्रश्न पूछें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3