let’s say i have a function like this:
def foo (a = "a", b="b", c="c", **kwargs): #do some work
I want to pass a dict
like this to the function as the only argument.
arg_dict = { "a": "some string" "c": "some other string" }
which should change the values of the a
and c
arguments but b
still remains the default value.
since foo
is in an external library i don’t want to change the function itself.
is there any way to achieve this?
EDIT
to clarify foo
has both default arguments like a
and has keyword arguments
like **kwargs
when i do this:
foo(**arg_dict)
**arg_dict
is passed as the **kwargs
and other arguments stay the default value.
Advertisement
Answer
You can unpack the arg_dict
using **
operator.
>>> def foo (a = "a", b="b", c="c", **kwargs): ... print(f"{a=}") ... print(f"{b=}") ... print(f"{c=}") ... print(f"{kwargs=}") ... >>> arg_dict = { ... "a": "some string", ... "c": "some other string", ... "addional_kwrag1": 1 ... } >>> >>> foo(**arg_dict) a='some string' b='b' c='some other string' kwargs={'addional_kwrag1': 1}