contextlib: @contextmanager
contextlib डेकोरेटर से संक्षिप्त रूप में कॉन्टेक्स्ट मैनेजर बनाएँ।
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():
passasynccontextmanager
असिंक्रोनस कोड के लिए 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 पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- with कथन का गहन अध्ययन
- __enter__ और __exit__ प्रोटोकॉल
- contextlib: @contextmanager
- व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न