संक्षेप में, जब भी नियंत्रण आपके प्रोग्राम में रिटर्न स्टेटमेंट तक पहुंचता है, तो प्रोग्राम का निष्पादन समाप्त हो जाता है और शेष स्टेटमेंट निष्पादित नहीं होंगे।
हालांकि, उपज के मामले में, जब भी नियंत्रण आपके कार्यक्रम में उपज विवरण तक पहुंचता है, तो आपके कार्यक्रम का निष्पादन रोक दिया जाता है और बाद में हम अन्य बयानों को कार्य में जारी रख सकते हैं।
आइए दोनों कथनों को विस्तार से समझते हैं।
उपज
किसी फ़ंक्शन में यील्ड स्टेटमेंट का उपयोग करने से फ़ंक्शन एक जनरेटर फ़ंक्शन बन जाता है जिसे लूप में उपयोग किया जा सकता है। जब फ़ंक्शन चल रहा होता है और यील्ड स्टेटमेंट निष्पादित होता है, तो यील्ड के बाद का मान उस लूप को वापस भेज दिया जाता है जिसे इसे कहा जाता है। अगली बार जब लूप पुनरावृत्त होता है, तो फ़ंक्शन यील्ड स्टेटमेंट के तुरंत बाद शुरू हो जाता है।
def func(): yield 1 yield 2 yield 3 for num in func(): print(num * num)
आउटपुट
1 4 9
उपरोक्त कार्यक्रम में, फ़ंक्शन को आमंत्रित करने वाला लूप फ़ंक फ़ंक्शन के पूरा होने पर पूरा हो जाएगा - या तो फ़ंक्शन के अंत (func ()) या रिटर्न स्टेटमेंट से मिलता है।
हालांकि, कोई भी नया लूप जो समान जनरेटर फ़ंक्शन का उपयोग करता है, फ़ंक्शन को फिर से प्रारंभ से निष्पादित करेगा।
वापसी
एक वापसी विवरण,
-
किसी फ़ंक्शन के निष्पादन को रोकने के लिए उपयोग किया जाता है और वैकल्पिक रूप से कॉलर को एक मान लौटाता है। एक फ़ंक्शन जिसमें रिटर्न होता है (लेकिन उपज नहीं) लूप में उपयोग नहीं किया जा सकता है (उपरोक्त उपज के विपरीत)।
-
यदि कोई फ़ंक्शन जिसे पहले निष्पादित किया गया है, फिर से कॉल किया जाता है, तो फ़ंक्शन प्रारंभ से निष्पादन शुरू होता है (उपरोक्त उपज के विपरीत)।
रिटर्न या यील्ड का उपयोग कब करें?
जब हम किसी अनुक्रम पर पुनरावृति करना चाहते हैं तो उपज का उपयोग करने की अनुशंसा की जाती है, हालांकि, संसाधनों की कमी के कारण या बस पूरे अनुक्रम को स्मृति में संग्रहीत नहीं करना चाहते हैं। अन्य मामलों के लिए हम रिटर्न स्टेटमेंट का उपयोग करने के बारे में सोच सकते हैं।
आइए पूर्णांक संख्या का वर्ग उत्पन्न करने के लिए यील्ड स्टेटमेंट का उपयोग करके एक और प्रोग्राम देखें।
def Square(): i = 1; # An Infinite loop to generate squares while True: yield i*i i += 1 # Next execution resumes from this point for num in Square(): if num > 100: break print(num)
आउटपुट
1 4 9 16 25 36 49 64 81 100
यील्ड स्टेटमेंट का इस्तेमाल आम तौर पर ट्राई के ट्राई क्लॉज में नहीं किया जाता है। अंत में ब्लॉक करें क्योंकि इस बात की कोई गारंटी नहीं है कि जनरेटर को फिर से शुरू किया जाएगा, इसलिए इस बात की कोई गारंटी नहीं है कि अंत में ब्लॉक कभी भी निष्पादित होगा।