contextmanager

Question

Example of a context manager.

Solution

"""
This is a  simple example of a context manager. The context manager is
implemented by a decorator provided by the contextlib module.

You will see that tag will yield after the first print statement and as it a
contextmanager, it is resumed after the __exit__ call, which is called by
default when the with statement falls out of scope and in that case, the next
print statement is called.

This outputs:
    <h1>
        foo
     </h1>
"""

from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

with tag("h1"):
    print("foo")