05. Context Managers in Depth
Context managers simplify resource management (files, network connections, etc.). They ensure proper setup and cleanup.
The with Statement
with open("example.txt", "w") as f:
f.write("Hello, world!")
# File is automatically closed
How It Works
A context manager implements two methods:
__enter__: Setup__exit__: Cleanup
Creating Your Own Context Manager
class ManagedResource:
def __enter__(self):
print("Acquiring resource")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Releasing resource")
with ManagedResource():
print("Using resource")
Contextlib Helpers
from contextlib import contextmanager
@contextmanager
def simple_cm():
print("Start")
yield
print("End")
with simple_cm():
print("Inside")
Practice Challenge
Write a context manager that measures and prints how long a block of code takes to run.
Wrap-Up
- Use
withfor safe resource management. - Create custom context managers with
__enter__and__exit__. - Use
contextlib.contextmanagerfor simpler cases.