from typing import ParamSpec, TypeVar, Callable from functools import wraps P = ParamSpec('P') R = TypeVar('R') def log(f: Callable[P, R]) -> Callable[P, R]: @wraps(f) def w(*a: P.args, **k: P.kwargs) -> R: return f(*a, **k) return w