def tracer(func, *pargs, **kargs): # Accept arbitrary arguments print('calling:', func.__name__) return func(*pargs, **kargs) # Pass along arbitrary arguments def func(a, b, c, d): return a + b + c + d print(tracer(func, 1, 2, c=3, d=4))