*args
and **kwargs
are a big deal in the python world, and to me, a bit magical:
On one hand, they allow one to inject arbitrary arguments to functions, which is extremely powerful.
On the other hand, if abused, can make your code extremely complex and unreadable.
I suggest reading args and kwargs to understand how they work in depth.