If you have a function like:
def f(a, b, c):
print(a, b, c)
and call it like:
f(*(1, 2, 3))
or
f(**{'a': 1, 'b': 2, 'c': 3})
we do not flow the provided types through the correct parameters. If
*d or
**e parameters were in the definition, these would receive all the values instead of just the excess ones.