
What are *args and **kwargs in python functions?
Let us first consider this piece of code which has a function named summation() which adds up numbers.
Example:
def summation(p,q):
print("sum:",p+q)
summation(10,20)Output:

Now, what if we pass more than two arguments to the summation() function. Look at this,
Example:
def summation(p,q):
print("sum:",x+y+z)
summation(2,4,6,8,10)Output:

We can see that we’ve got TypeError.
Now to achieve this, Python has enabled with something called *args, **kwargs.
Using these we can pass a variable number of arguments to a function.
*args (Non-Keyword Arguments):
Example:
def summation(*num):
sum = 0
for n in num:
sum = sum + n
print("Sum:",sum)
summation(2,5)
summation(4,8,12,16)
summation(1,3,5,7,9,11,13,15,17)Output:

This allows us to pass a variable number of non-keyword arguments to a function. We should add an asterisk(*) before the parameter name to pass variable length arguments. It makes use of a tuple for argument passing and these passed arguments again make a tuple with the same name as the parameter excluding asterisk(*) inside the function.
We used *num as a parameter which allows us to pass variable-length argument lists to the summation function. We passed 3 different tuples as an argument to the function. These tuples are of variable length.
**kwargs (Keyword Arguments):
While using *args, we won’t be able to pass a keyword argument. For this to happen, Python has come up with a solution called **kwargs, which allows us to pass the variable length of keyword arguments to a function.
We should add a double asterisk ** before the parameter name to denote kwargs type of argument. It makes use of a dictionary for argument passing and these passed arguments again make a dictionary with name same as the parameter excluding double asterisk ** inside the function.
Example:
def info(**data):
print("\nData type of argument:",type(data))
for key, value in data.items():
print("{} is {}".format(key,value))
info(State ="Telangana", Capital="Hyderabad")
info(State ="Andhra Pradesh", Capital="Amaravathi", Population="4.94 crores", State_Code="37")Output:

We have a function info() with **data as a parameter. We passed two to the info() function dictionaries with variable argument length.