both positional and keyword arguments.
Yes one could do something like:
def fun(a, b=0): ...
def wraps_fun(args, b=inspect.signature(fun).parameters['b'].default): ...
But I would hardly call that clear. Further it is not robust as would fail if `fun` is itself wrapped in way
that destroys its signature. E.g.:
# should decorate here with functools.wraps(f)
def wrapper(*args, **kwargs):
return f(*args, **kwargs)