कुछ उदाहरण हैं: फ़ाइलों का उपयोग करके खोलना with open(filename) as fp:
, ताले का उपयोग करके प्राप्त करना with lock:
(जहां lock
एक उदाहरण है threading.Lock
)। आप contextmanager
डेकोरेटर का उपयोग करके अपने स्वयं के संदर्भ प्रबंधकों का निर्माण भी कर सकते हैं contextlib
। उदाहरण के लिए, मैं अक्सर इसका उपयोग तब करता हूं जब मुझे वर्तमान निर्देशिका को अस्थायी रूप से बदलना पड़ता है और फिर मैं जहां था वहां वापस लौटता हूं:
from contextlib import contextmanager
import os
@contextmanager
def working_directory(path):
current_dir = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(current_dir)
with working_directory("data/stuff"):
# do something within data/stuff
# here I am back again in the original working directory
यहां एक और उदाहरण दिया गया है जो अस्थायी रूप से पुनर्निर्देशित करता है sys.stdin
, sys.stdout
और sys.stderr
कुछ अन्य फ़ाइल हैंडल के लिए और बाद में उन्हें पुनर्स्थापित करता है:
from contextlib import contextmanager
import sys
@contextmanager
def redirected(**kwds):
stream_names = ["stdin", "stdout", "stderr"]
old_streams = {}
try:
for sname in stream_names:
stream = kwds.get(sname, None)
if stream is not None and stream != getattr(sys, sname):
old_streams[sname] = getattr(sys, sname)
setattr(sys, sname, stream)
yield
finally:
for sname, stream in old_streams.iteritems():
setattr(sys, sname, stream)
with redirected(stdout=open("/tmp/log.txt", "w")):
# these print statements will go to /tmp/log.txt
print "Test entry 1"
print "Test entry 2"
# back to the normal stdout
print "Back to normal stdout again"
और अंत में, एक अन्य उदाहरण जो एक अस्थायी फ़ोल्डर बनाता है और संदर्भ छोड़ते समय इसे साफ करता है:
from tempfile import mkdtemp
from shutil import rmtree
@contextmanager
def temporary_dir(*args, **kwds):
name = mkdtemp(*args, **kwds)
try:
yield name
finally:
shutil.rmtree(name)
with temporary_dir() as dirname:
# do whatever you want
with
पायथन 3 प्रलेखन में है।