While this is nice in a lot of ways, it also can make it harder for your callers to use more dynamic patterns. You can no longer call it with
process_data(**kwargs)
and have the data field pulled out of kwargs. Of course you can still do data = kwargs.pop(“data”)
process_data(data, **kwargs)
but if you are the only library doing it, it can cause things to break when it breaks programmers expectations.