Python Academy · पाठ

contextlib: @contextmanager

contextlib डेकोरेटर से संक्षिप्त रूप में कॉन्टेक्स्ट मैनेजर बनाएँ।

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

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

contextlib क्यों?

contextlib.contextmanager आपको क्लास के बजाय जनरेटर फ़ंक्शन के रूप में कॉन्टेक्स्ट मैनेजर लिखने देता है, जिससे अनावश्यक प्रारंभिक कोड कम हो जाता है।

from contextlib import contextmanager

@contextmanager
def managed():
    print("setup")
    yield
    print("teardown")

with managed():
    print("inside")

मान लौटाना

आप जो भी yield करते हैं, वह with कथन में as चर से जुड़ जाता है।

from contextlib import contextmanager

@contextmanager
def temp_list():
    lst = []
    yield lst
    print(f"Final list: {lst}")

with temp_list() as lst:
    lst.append(1)
    lst.append(2)

@contextmanager में अपवाद प्रबंधन

अपवाद आने पर भी सफ़ाई सुनिश्चित करने के लिए yield को try/finally में रखिए।

from contextlib import contextmanager

@contextmanager
def safe_open(path):
    f = open(path)
    try:
        yield f
    finally:
        f.close()

with safe_open("data.txt") as f:
    print(f.read())

अपवादों को दबाना

उसे दबाने के लिए जनरेटर के अंदर अपवाद पकड़िए — यह __exit__ से True लौटाने के समान है।

from contextlib import contextmanager

@contextmanager
def ignore_value_errors():
    try:
        yield
    except ValueError:
        pass

with ignore_value_errors():
    raise ValueError("ignored")

contextlib.suppress

contextlib.suppress(*exceptions) एक पहले से बना कॉन्टेक्स्ट मैनेजर है, जो निर्दिष्ट अपवाद प्रकारों को दबाता है।

from contextlib import suppress

with suppress(FileNotFoundError):
    open("missing.txt")

print("continues")

contextlib.closing

closing(obj) ऐसा कॉन्टेक्स्ट मैनेजर बनाता है, जो बाहर निकलते समय obj.close() को कॉल करता है। यह उन ऑब्जेक्ट के लिए उपयोगी है जिनमें close() है, लेकिन __exit__ नहीं है।

from contextlib import closing
from urllib.request import urlopen

with closing(urlopen("https://example.com")) as page:
    content = page.read()

contextlib.nullcontext

nullcontext कुछ भी न करने वाला कॉन्टेक्स्ट मैनेजर है। जब कॉन्टेक्स्ट मैनेजर वैकल्पिक हो, तब यह उपयोगी होता है।

from contextlib import nullcontext

def process(data, lock=None):
    cm = lock if lock is not None else nullcontext()
    with cm:
        return [x*2 for x in data]

contextlib.ExitStack

ExitStack आपको कॉन्टेक्स्ट मैनेजरों की बदलती संख्या को गतिशील रूप से प्रबंधित करने देता है।

from contextlib import ExitStack

files = ["a.txt", "b.txt", "c.txt"]
with ExitStack() as stack:
    handles = [stack.enter_context(open(f)) for f in files]
    data = [h.read() for h in handles]

@contextmanager का पुनः उपयोग

जनरेटर-आधारित कॉन्टेक्स्ट मैनेजर हर कॉल के लिए केवल एक बार उपयोग किया जा सकता है। उसका पुनः उपयोग करने के लिए सजाए गए फ़ंक्शन को फिर से कॉल कीजिए।

from contextlib import contextmanager

@contextmanager
def counter():
    count = 0
    yield lambda: count.__add__  # each call is independent
    print("done")

with counter():
    pass
with counter():
    pass

asynccontextmanager

असिंक्रोनस कोड के लिए contextlib.asynccontextmanager का उपयोग करके async with मैनेजरों को जनरेटर के रूप में लिखिए।

from contextlib import asynccontextmanager

@asynccontextmanager
async def async_session():
    session = await create_session()
    try:
        yield session
    finally:
        await session.close()

contextlib.redirect_stdout

मानक आउटपुट को अस्थायी रूप से किसी भी फ़ाइल-जैसे ऑब्जेक्ट पर भेजिए।

import io
from contextlib import redirect_stdout

buf = io.StringIO()
with redirect_stdout(buf):
    print("captured")

print(buf.getvalue())  # captured

त्वरित जाँच

@contextmanager जनरेटर में, अपवाद आने पर भी सफ़ाई का कोड चलना सुनिश्चित करने के लिए उसे कहाँ रखना चाहिए?

पुनरावलोकन

@contextmanager एक जनरेटर को कॉन्टेक्स्ट मैनेजर में बदल देता है। सुरक्षित सफ़ाई के लिए yield के चारों ओर try/finally का उपयोग कीजिए। contextlib मॉड्यूल suppress, nullcontext, ExitStack और अन्य सुविधाएँ भी देता है।

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

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

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

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

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

क्या “contextlib: @contextmanager” पाठ निःशुल्क है?

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

“contextlib: @contextmanager” में मैं क्या सीखूँगा?

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

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

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

“contextlib: @contextmanager” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. with कथन का गहन अध्ययन
  2. __enter__ और __exit__ प्रोटोकॉल
  3. contextlib: @contextmanager
  4. व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न
← Python Academy पर वापस जाएँ