एक जेनरेटर की रिक्तता का निर्धारण
पायथन में, जेनरेटर आलसी मूल्यांकन और बड़े डेटासेट पर पुनरावृत्ति के लिए एक शक्तिशाली उपकरण हैं। हालाँकि, यह निर्धारित करना कि जनरेटर खाली है या नहीं, इसकी गतिशील प्रकृति के कारण एक अनोखी चुनौती पेश करता है। सूचियों या टुपल्स के विपरीत, जनरेटर के पास आकार विशेषता नहीं होती है, और बस उन पर पुनरावृत्ति करने से स्टॉपइटरेशन अपवाद हो जाएगा।
पीक बनाम हैसनेक्स्ट
कुछ लोग सुझाव दे सकते हैं यह जाँचने के लिए कि जनरेटर में आइटम हैं या नहीं, peek() फ़ंक्शन का उपयोग करना। जबकि पीक() आपको जनरेटर के पहले आइटम को उपभोग किए बिना पुनः प्राप्त करने की अनुमति देता है, यह यह निर्धारित करने का कोई तरीका प्रदान नहीं करता है कि जनरेटर खाली है या नहीं। ऐसा इसलिए है क्योंकि जनरेटर खाली होने पर peek() एक स्टॉपइटरेशन अपवाद उठाता है, जो उस अपवाद से अप्रभेद्य है जो एक खाली जनरेटर पर पुनरावृत्त करने का प्रयास करते समय उठाया जाएगा।
इसी तरह, hasNext() फ़ंक्शन, आमतौर पर जावा में पाया जाता है, पायथन जेनरेटर में उपलब्ध नहीं है।
से रिक्तता की जांच की जा रही है प्रारंभ
यह निर्धारित करने के लिए कि क्या जनरेटर प्रारंभ से खाली है, आप एक कस्टम फ़ंक्शन का उपयोग कर सकते हैं जैसे प्रतिक्रिया में दिया गया है:
def peek(iterable):
try:
first = next(iterable)
except StopIteration:
return None
return first, itertools.chain([first], iterable)
यह फ़ंक्शन जनरेटर के पहले तत्व को पुनः प्राप्त करता है, यदि जनरेटर खाली है तो कोई नहीं लौटाता है। यह एक संशोधित संस्करण लौटाकर जनरेटर की स्थिति को भी संरक्षित करता है जिसमें पहला तत्व शामिल है।
उपयोग
इस फ़ंक्शन का उपयोग करने के लिए, आप इसे जनरेटर के साथ कॉल कर सकते हैं तर्क:
res = peek(mysequence)
if res is None:
# sequence is empty. Do stuff.
else:
first, mysequence = res
# Do something with first, maybe?
# Then iterate over the sequence:
for element in mysequence:
# etc.
यह जांच आपको यह निर्धारित करने की अनुमति देती है कि जेनरेटर खाली है या नहीं और उस पर पुनरावृत्ति करने से पहले, खाली केस को उचित रूप से संभाल लें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3