Python Academy · पाठ

yield from और प्रत्यायोजन

जनरेटरों की रचना करें

पाठ 4, कुल 4 में से13 चरण

yield from और प्रत्यायोजन, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

yield from से हल होने वाली समस्या

जब एक जनरेटर किसी दूसरे इटरेबल का हर मान देना चाहता है, तब आप मैन्युअल लूप लिख सकते हैं। yield from यही काम एक पंक्ति में करता है।

def manual():
    for x in [1, 2, 3]:
        yield x

print(list(manual()))

yield from का परिचय

yield from iterable उस इटरेबल को काम सौंपता है और उसके हर मान को क्रम से देता है। यह फ़ॉरवर्ड करने वाले लूप से छोटा और स्पष्ट होता है।

def delegate():
    yield from [1, 2, 3]

print(list(delegate()))

कई स्रोतों को संयोजित करना

अनुक्रमों को आलसी ढंग से जोड़ने के लिए आप कई yield from कथनों को चेन कर सकते हैं।

def chained():
    yield from 'ab'
    yield from [1, 2]
    yield from range(2)

print(list(chained()))

दूसरे जनरेटर को काम सौंपना

जिस इटरेबल को काम सौंपा गया है, वह स्वयं एक जनरेटर हो सकता है। इससे आप जनरेटरों को मिलाकर बड़े जनरेटर बना सकते हैं।

def evens(n):
    for i in range(n):
        if i % 2 == 0:
            yield i

def report(n):
    print('evens:')
    yield from evens(n)

print(list(report(6)))

नेस्टेड सूचियों को समतल करना

yield from का एक पारंपरिक उपयोग पुनरावर्ती समतलीकरण है: ऐसा जनरेटर जो उप-सूचियों के लिए स्वयं को काम सौंपता है।

def flatten(items):
    for item in items:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

print(list(flatten([1, [2, [3, 4]], 5])))

yield from बनाम लूप

नीचे दिए गए दोनों संस्करण समान आउटपुट देते हैं। पठनीयता के लिए yield from को प्राथमिकता दी जाती है, क्योंकि यह मान भेजने और रिटर्न परिणाम जैसे उन्नत फ़ीचर भी आगे भेजता है।

def with_loop(src):
    for x in src:
        yield x

def with_yield_from(src):
    yield from src

print(list(with_loop(range(3))))
print(list(with_yield_from(range(3))))

उप-जनरेटर का रिटर्न प्राप्त करना

जब किसी ऐसे जनरेटर को, जिसे काम सौंपा गया है, return से कोई मान मिलता है, तब yield from का परिणाम वही मान होता है। इससे उप-जनरेटर किसी परिणाम की सूचना दे सकते हैं।

def counter(n):
    count = 0
    for i in range(n):
        yield i
        count += 1
    return count

def driver():
    total = yield from counter(3)
    print('subgen yielded', total, 'items')

list(driver())

pipeline बनाना

काम सौंपने से pipeline को नामित चरणों में बाँटना और उन्हें संयोजित करना आसान हो जाता है।

def source():
    yield from range(5)

def only_odd(src):
    for x in src:
        if x % 2 == 1:
            yield x

def pipeline():
    yield from only_odd(source())

print(list(pipeline()))

किसी भी इटरेबल को काम सौंपना

yield from केवल जनरेटरों के साथ नहीं, बल्कि किसी भी इटरेबल के साथ काम करता है: सूचियाँ, टपल, सेट, स्ट्रिंग, डिक्शनरी की कुंजियाँ और अन्य।

def mixed():
    yield from {1, 2, 3}
    yield from ('a', 'b')

result = list(mixed())
print(sorted(str(x) for x in result))

जनरेटरों को क्रम से मिलाना

आप ऐसा जनरेटर बना सकते हैं जो कई स्रोतों पर क्रमिक रूप से चलता है। यह धाराओं को जोड़ने के लिए उपयोगी है।

def concat(*iterables):
    for it in iterables:
        yield from it

print(list(concat([1, 2], [3], [4, 5])))

पठनीयता का लाभ

गहराई से नेस्टेड या वृक्ष-जैसे डेटा के लिए yield from पुनरावर्ती जनरेटरों को छोटा और उनके उद्देश्य को स्पष्ट रखता है।

def walk(tree):
    yield tree['name']
    for child in tree.get('children', []):
        yield from walk(child)

tree = {'name': 'root', 'children': [
    {'name': 'a'},
    {'name': 'b', 'children': [{'name': 'c'}]}
]}
print(list(walk(tree)))

त्वरित जाँच

yield from की अपनी समझ जाँचिए।

पुनरावलोकन

आपने yield from और काम सौंपना सीखा:

  • यह किसी आंतरिक इटरेबल का हर मान आगे भेजता है।
  • यह जनरेटरों को संयोजित करता है और पुनरावर्ती समतलीकरण को सक्षम बनाता है।
  • यह उप-जनरेटर का रिटर्न मान प्राप्त करता है।
  • यह मैन्युअल फ़ॉरवर्डिंग लूप से अधिक स्पष्ट होता है।

अगला पाठ्यक्रम: थ्रेडिंग और मल्टीप्रोसेसिंग से समवर्ती प्रोग्रामिंग।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “yield from और प्रत्यायोजन” पाठ निःशुल्क है?

हाँ—“yield from और प्रत्यायोजन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“yield from और प्रत्यायोजन” में मैं क्या सीखूँगा?

जनरेटरों की रचना करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“yield from और प्रत्यायोजन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Iterator प्रोटोकॉल
  2. जनरेटर फ़ंक्शन
  3. जनरेटर अभिव्यक्तियाँ
  4. yield from और प्रत्यायोजन
← Python Academy पर वापस जाएँ