जनरेटर फ़ंक्शन
yield से विलंबपूर्वक मान बनाएँ
जनरेटर फ़ंक्शन, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
जनरेटर क्या है
जनरेटर फ़ंक्शन सामान्य फ़ंक्शन जैसा दिखता है, लेकिन return के बजाय (या उसके साथ) yield का उपयोग करता है। इसे कॉल करने पर इसका बॉडी नहीं चलता; इसके बजाय एक जनरेटर ऑब्जेक्ट मिलता है, जो एक इटरेटर होता है।
def gen():
yield 1
yield 2
yield 3
g = gen()
print(type(g).__name__)
print(list(g))yield निष्पादन को रोकता है
हर बार next() कॉल करने पर फ़ंक्शन तब तक चलता है, जब तक उसे yield न मिल जाए। फिर वह वह मान लौटाकर अपनी स्थिति को स्थिर कर लेता है। अगली कॉल yield के ठीक बाद से जारी रहती है।
def steps():
print('start')
yield 'a'
print('resumed')
yield 'b'
g = steps()
print(next(g))
print(next(g))जनरेटर पर लूप चलाना
जनरेटर एक इटरेटर होता है, इसलिए for लूप इसे अपने-आप चलाता है और फ़ंक्शन समाप्त होने पर रुक जाता है (जिससे आंतरिक रूप से StopIteration उठता है)।
def countdown(n):
while n > 0:
yield n
n -= 1
for x in countdown(4):
print(x)आलसी मूल्यांकन
जनरेटर आलसी होते हैं: मान केवल माँगे जाने पर बनाए जाते हैं। इसका अर्थ है कि आप बहुत बड़े या अनंत अनुक्रमों को अधिक मेमोरी उपयोग किए बिना दर्शा सकते हैं।
def naturals():
n = 1
while True:
yield n
n += 1
g = naturals()
print(next(g), next(g), next(g))yield के बीच स्थिति
स्थानीय चर yield बिंदुओं के बीच अपने मान बनाए रखते हैं। जनरेटर स्वाभाविक रूप से यह याद रखता है कि वह कहाँ रुका था; इसके लिए मैन्युअल इंडेक्स का हिसाब रखने की आवश्यकता नहीं होती।
def fib():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
g = fib()
print([next(g) for _ in range(7)])जनरेटर बनाम सूची बनाना
एक सामान्य फ़ंक्शन पूरी सूची एक ही बार में बनाकर लौटाता है। जनरेटर माँगे जाने पर आइटम देता है। जब अनुक्रम बड़ा हो या आप बीच में रुक सकते हों, तब जनरेटर का उपयोग कीजिए।
def squares_list(n):
result = []
for i in range(n):
result.append(i * i)
return result
def squares_gen(n):
for i in range(n):
yield i * i
print(squares_list(5))
print(list(squares_gen(5)))जल्दी रुकना
क्योंकि उत्पादन आलसी ढंग से होता है, आप लूप से बाहर निकल सकते हैं और जनरेटर शेष भाग की गणना कभी नहीं करेगा।
def naturals():
n = 1
while True:
print('producing', n)
yield n
n += 1
for x in naturals():
if x > 3:
break
print('got', x)जनरेटर के अंदर return
जनरेटर में अकेला return उसे समाप्त कर देता है (जिससे StopIteration उठता है)। आपके द्वारा लौटाया गया कोई भी मान अपवाद की value विशेषता बन जाता है, जिसे अधिकांश लूप अनदेखा कर देते हैं।
def up_to(stop):
i = 0
while True:
if i >= stop:
return
yield i
i += 1
print(list(up_to(4)))जनरेटर का एक ही बार उपयोग
सभी इटरेटर की तरह, जनरेटर का भी एक ही बार उपभोग किया जा सकता है। समाप्त हो जाने के बाद वह कोई मान नहीं देता। नया जनरेटर पाने के लिए फ़ंक्शन को फिर से कॉल कीजिए।
def gen():
yield 1
yield 2
g = gen()
print(list(g))
print(list(g))
print(list(gen()))जनरेटर से फ़िल्टर करना
जनरेटर साफ़-सुथरे डेटा pipeline बनाने में मदद करते हैं। यहाँ हम केवल सम संख्याएँ, एक-एक करके, देते हैं।
def evens(numbers):
for n in numbers:
if n % 2 == 0:
yield n
print(list(evens(range(10))))जनरेटर को जोड़ना
एक जनरेटर दूसरे जनरेटर का उपभोग कर सकता है, जिससे एक बहु-चरणीय pipeline बनती है और हर चरण आलसी ढंग से चलता है।
def numbers(n):
for i in range(n):
yield i
def doubled(src):
for x in src:
yield x * 2
print(list(doubled(numbers(5))))त्वरित जाँच
जनरेटर फ़ंक्शन की अपनी समझ जाँचिए।
पुनरावलोकन
आपने जनरेटर फ़ंक्शन सीखे:
yieldनिष्पादन को रोकता और फिर जारी करता है तथा स्थानीय स्थिति को बनाए रखता है।- फ़ंक्शन को कॉल करने पर एक आलसी जनरेटर ऑब्जेक्ट मिलता है।
- वे मेमोरी बचाते हैं और pipeline तथा अनंत धाराओं के लिए उपयोगी हैं।
- किसी भी इटरेटर की तरह उनका भी एक ही बार उपयोग किया जा सकता है।
अगला विषय: और भी संक्षिप्त जनरेटर एक्सप्रेशन।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 76
- पाठ
- 320
अक्सर पूछे जाने वाले प्रश्न
क्या “जनरेटर फ़ंक्शन” पाठ निःशुल्क है?
हाँ—“जनरेटर फ़ंक्शन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“जनरेटर फ़ंक्शन” में मैं क्या सीखूँगा?
yield से विलंबपूर्वक मान बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“जनरेटर फ़ंक्शन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।