उपज कीवर्ड का उपयोग जनरेटर में किया जाता है। इसके व्यवहार को समझने के लिए आइए पहले देखें कि पुनरावर्तनीय क्या हैं। पायथन वस्तुओं की सूची, फ़ाइल, स्ट्रिंग आदि को पुनरावर्तनीय कहा जाता है। कोई भी वस्तु जिसे वाक्य रचना में for .. का उपयोग करके ट्रेस किया जा सकता है, चलने योग्य है। इटरेटर ऑब्जेक्ट भी एक पुनरावर्तनीय है, लेकिन इसे केवल एक बार ही पुनरावृत्त किया जा सकता है। Iterator ऑब्जेक्ट को iter() फ़ंक्शन का उपयोग करके किसी भी चलने योग्य रूप में प्राप्त किया जा सकता है और इसमें अगली() विधि है जिसके उपयोग से पुनरावृत्ति की जाती है।
>>> L1 = [1,2,3,4]
>>> I1 = iter(L1)
>>> while True:
try:
print (next(I1))
except StopIteration:
sys.exit()
जनरेटर एक फ़ंक्शन के समान दिखाई देता है, लेकिन यह उपज कीवर्ड द्वारा पुनरावर्तक में लगातार आइटम उत्पन्न करता है।
जब एक जनरेटर फ़ंक्शन को कॉल किया जाता है, तो यह फ़ंक्शन के निष्पादन को शुरू किए बिना एक इटरेटर ऑब्जेक्ट देता है। जब अगली () विधि को पहली बार कॉल किया जाता है, तो फ़ंक्शन तब तक निष्पादित होना शुरू हो जाता है जब तक कि यह यील्ड स्टेटमेंट तक नहीं पहुंच जाता है, जो यील्ड वैल्यू लौटाता है। यील्ड ट्रैक रखता है यानी पिछले निष्पादन को याद रखता है और दूसरा अगला () कॉल पिछले मान से जारी रहता है।
निम्नलिखित उदाहरण फाइबोनैचि श्रृंखला में संख्याओं वाला एक पुनरावर्तक उत्पन्न करता है। जनरेटर फ़ंक्शन के लिए प्रत्येक कॉल fibo() फिबोनाची श्रृंखला में क्रमिक तत्व उत्पन्न करता है।
import sys
def fibo(n):
a,b=0,1
while True:
if a>n : return
yield a
a, b = b, a+b
f = fibo(20)
while True:
try:
print (next(f))
except StopIteration:
sys.exit()