techmore.in

Python - Context Managers

What is a Context Manager?

A context manager in Python is a construct that allows you to allocate and release resources precisely when you want to. The most common way to use a context manager is with the with statement.

Why Use Context Managers?

  • They help manage resources like files, network connections, or locks.
  • They ensure that necessary cleanup (like closing files) happens automatically.
  • They make the code cleaner and easier to read.

Using the with Statement

The with statement is commonly used to manage file operations.

python
with open("example.txt", "r") as file:
    data = file.read()
    print(data)  # File is automatically closed after this block

Behind the Scenes

The with statement calls the context manager’s __enter__() method at the beginning and __exit__() at the end.

Creating a Custom Context Manager (Class-based)

You can create your own context manager by defining a class with __enter__ and __exit__ methods.

python
class MyContext:
    def __enter__(self):
        print("Entering context")
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        print("Exiting context")

with MyContext():
    print("Inside the context")

Creating a Context Manager Using contextlib

The contextlib module allows you to write a context manager using a generator function and the @contextmanager decorator.

python
from contextlib import contextmanager

@contextmanager
def my_context():
    print("Entering context")
    yield
    print("Exiting context")

with my_context():
    print("Inside context")

When to Use?

  • When managing external resources like files, database connections, or sockets.
  • When you need to guarantee cleanup code is always executed.

Pros and Cons

  • Pros: Clean syntax, automatic resource handling, reusable patterns.
  • Cons: Slightly complex to implement custom managers for beginners.