python function *args and **kwargs with other specified keyword arguments
In Python 3 this works:
Python 3.2.3 (default, Oct 19 2012, 19:53:16)
>>> def set_axis(self, *args, xlabel="x", ylabel="y", **kwargs):
... print(args, xlabel, ylabel, kwargs)
...
>>> set_axis(None, "test1", "test2", xlabel="new_x", my_kwarg="test3")
('test1', 'test2') new_x y {'my_kwarg': 'test3'}
>>>
Here's a slight tweek to Jure C.'s answer:
def set_axis(self, *args, **kwargs):
xlabel = kwargs.pop('xlabel', 'x')
ylabel = kwargs.pop('ylabel', 'y')
I changed get
to pop
to remove xlabel
and ylabel
from kwargs
if present. I did this because the rest of the code in the original question contains a loop that is meant to iterate through all kwargs
except for xlabel
and ylabel
.
You would use a different pattern:
def set_axis(self, *args, **kwargs):
xlabel = kwargs.get('xlabel', 'x')
ylabel = kwargs.get('ylabel', 'y')
This allows you to use * and ** while keeping the fallback values if keyword arguments aren't defined.