Chapter 1 - Best Practices
Chapter 2 - Context Managers
with my_context_manager() as value:
# do something
@contextlib.contextmanager
def my_function():
# this function can be used in a “with” statement now
Chapter 3 - Decorators
@my_decorator
def my_decorated_function():
# do something
def my_decorator(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
Chapter 4 - More on Decorators
def decorator_that_takes_args(a, b, c):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
return decorator