The way you defined the function:
def a(a = 1, b = 2, c = 3, *d, **e):
print(a, b, c)
print(d)
print(e)
a, b and c are positional arguments. d will be filled with the excess arguments
and e will receive a dictionary, if supplied.
One thing is the function definition, another is the function call. If you pass
a number of arguments, the first three will be assigned to a, b and c no matter
what, even if you supplied defaults.
Peter's solution turns a, b and c into keyword arguments. That way you can call
the function with an arbitrary number of arguments and a, b and c will keep the
default values, unless you be explicit about the values you want to assign to
a, b and c.
--
https://mail.python.org/mailman/listinfo/python-list