python *args and **kwargs explained
Tue Oct 30 2018
You are entering a new codebase, the code looks good, well organized and well commented.
Then you notice a few methods with these weird *args, **kwargs
?!?!?!
then you dive into that function and see it passes those forward to other function or handling those weird params.
So… what are those?
*args
–
that is the shorthand of accessing an unknown amount of params in the function. For example, let’s create a avg
function:
def avg_numbers(*args):
return sum(args) / len(args)
res = sum_numbers(5,1,1,2,6)
So as you can see here, I can pass how many variables I want to the avg_numbers
function and it will be handled properly. You can always use the normal method params with *args
like this example
def first_and_others(first, *args):
print(first)
print(" ".join(args))
first_and_others("Im First", "the", "rest", "of", "us")
the above function will print:
ImFirst
the rest of us
**kwargs
–
that is for accessing the keyworded params as a dictionary. Lets start with a simple example:
def first_and_second(**kwargs):
print(kwargs["first"])
print(kwargs["sec"])
first_and_second(first="sss", sec="cxc")
As you can see here we get easy access to the passed params.
Important note, you are not forced to use
*args, **kwargs
as the variable names, you can use *big_list, **big_dict
it’s only a convention in the python world. What you are forced to have are thos single and double *
The second note is that you can can use different variations of those two “magic” params. You can have only
*args
or only *kwargs
or a mix with the “regular” params we all know