जनरेटर अभिव्यक्तियाँ
संक्षिप्त विलंबित पाइपलाइन लिखें
जनरेटर अभिव्यक्तियाँ, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सूची कॉम्प से जनरेटर एक्सप्रेशन तक
जनरेटर एक्सप्रेशन सूची कॉम्प्रिहेंशन जैसा दिखता है, लेकिन वर्ग कोष्ठकों के बजाय कोष्ठकों का उपयोग करता है। यह पूरी सूची बनाने के बजाय आलसी ढंग से मान उत्पन्न करता है।
list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))मेमोरी में अंतर
सूची कॉम्प्रिहेंशन हर तत्व के लिए पहले से मेमोरी आवंटित करता है। जनरेटर एक्सप्रेशन तब तक लगभग कुछ भी संग्रहीत नहीं करता, जब तक आप मान न माँगें। उनके आकारों की तुलना कीजिए।
import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))जनरेटर एक्सप्रेशन पर इटरेशन
आप जनरेटर एक्सप्रेशन का उपभोग किसी भी इटरेटर की तरह कर सकते हैं: for लूप, next() या उसे किसी फ़ंक्शन को पास करके।
gen = (c.upper() for c in 'hello')
for ch in gen:
print(ch)if से फ़िल्टर करना
केवल मेल खाने वाले आइटम रखने के लिए if क्लॉज़ जोड़िए, ठीक वैसे ही जैसे कॉम्प्रिहेंशन में करते हैं।
evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))फ़ंक्शन को सीधे पास करना
जब जनरेटर एक्सप्रेशन किसी फ़ंक्शन का एकमात्र आर्ग्युमेंट हो, तब आप अतिरिक्त कोष्ठक हटा सकते हैं। यह साफ़-सुथरा होता है और अस्थायी सूची बनाने से बचाता है।
total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)एक ही बार उपयोग की याद रखें
जनरेटर फ़ंक्शन की तरह, जनरेटर एक्सप्रेशन भी एक बार चलने के बाद समाप्त हो जाता है। दूसरी बार इटरेट करने पर वह कुछ नहीं देता।
gen = (x for x in range(3))
print(list(gen))
print(list(gen))एक्सप्रेशन को जोड़ना
आलसी pipeline बनाने के लिए आप एक जनरेटर एक्सप्रेशन को दूसरे में भेज सकते हैं। अंतिम उपभोक्ता द्वारा मान लेने तक कुछ भी गणना नहीं की जाती।
nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))any() और all()
जनरेटर एक्सप्रेशन any() और all() के साथ विशेष रूप से उपयोगी होते हैं, क्योंकि वे शॉर्ट-सर्किट कर सकते हैं और उत्तर ज्ञात होते ही रुक जाते हैं।
words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))नेस्टेड लूप
कॉम्प्रिहेंशन की तरह, जनरेटर एक्सप्रेशन कई for क्लॉज़ का समर्थन करते हैं, जिन्हें बाएँ से दाएँ पढ़ा जाता है।
pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))आलसी pipeline का उदाहरण
यहाँ टेक्स्ट संसाधित करने वाली एक छोटी pipeline है। हर चरण आलसी है, इसलिए बहुत बड़ी फ़ाइल को पूरी तरह मेमोरी में लोड किए बिना स्ट्रीम किया जा सकता है।
lines = [' alpha ', '', ' beta', 'gamma ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))किसे चुनना चाहिए
जब आपको डेटा का कई बार उपयोग करना हो या इंडेक्सिंग चाहिए हो, तब सूची कॉम्प्रिहेंशन का उपयोग कीजिए। एक बार में स्ट्रीम करने या बड़े डेटा के लिए जनरेटर एक्सप्रेशन का उपयोग कीजिए।
data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)त्वरित जाँच
जनरेटर एक्सप्रेशन की अपनी समझ जाँचिए।
पुनरावलोकन
आपने जनरेटर एक्सप्रेशन सीखे:
- सूची कॉम्प्रिहेंशन के आलसी विकल्प के लिए कोष्ठकों का उपयोग कीजिए।
- वे मेमोरी बचाते हैं और
ifफ़िल्टर तथा नेस्टेड लूप का समर्थन करते हैं। - वे
sum,any,allऔर चेनिंग के साथ अच्छी तरह काम करते हैं। - उनका भी एक ही बार उपयोग किया जा सकता है।
अगला विषय: yield from से जनरेटरों को संयोजित करना।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 76
- पाठ
- 320
अक्सर पूछे जाने वाले प्रश्न
क्या “जनरेटर अभिव्यक्तियाँ” पाठ निःशुल्क है?
हाँ—“जनरेटर अभिव्यक्तियाँ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“जनरेटर अभिव्यक्तियाँ” में मैं क्या सीखूँगा?
संक्षिप्त विलंबित पाइपलाइन लिखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“जनरेटर अभिव्यक्तियाँ” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Iterator प्रोटोकॉल
- जनरेटर फ़ंक्शन
- जनरेटर अभिव्यक्तियाँ
- yield from और प्रत्यायोजन