from typing import Callable
import functools


def do_repeated(n: int = 1):
    """
    Decorator that repeats the function multiple times.

    This is helpful to demonstrate the concept of decorators with parms.
    We can think of this function as a closure that attaches the parameters
    and returns a decorator without parameters.

    :param int n: Message to attach to print function.
    """
    def decorator(func: Callable):
        @functools.wraps(func)
        def repeated_wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return repeated_wrapper
    return decorator