Education is not limited to just classrooms. It can be gained anytime, anywhere... - Ravi Ranjan (M.Tech-NIT)

What is *args ??

*args  allows us to pass variable number of arguments to the function. Let’s take an example to make this clear.

Suppose you created a function to add two number like this.

 1 2 def sum(a, b):     print("sum is", a+b)

As you can see this program only accepts two numbers, what if you want to pass more than two arguments, this is where *args  comes into play.

 1 2 3 4 5 def sum(*args):     s = 0     for i in args:         s += i     print("sum is", s)

Now you can pass any number of arguments to the function like this,

 1 2 3 4 5 6 7 8 >>> sum(1, 2, 3) 6 >>> sum(1, 2, 3, 4, 5, 7) 22 >>> sum(1, 2, 3, 4, 5, 7, 8, 9, 10) 49 >>> sum() 0

Note: name of *args  is just a convention you can use anything that is a valid identifier. For e.g *myargs is perfectly valid.

What is **kwargs ?

**kwargs allows us to pass variable number of keyword argument like thisfunc_name(name='tim', team='school')

 1 2 3 4 5 def my_func(**kwargs):     for i, j in kwargs.items():         print(i, j)   my_func(name='tim', sport='football', roll=19)

Expected Output:

 1 2 3 sport football roll 19 name tim

Using *args and **kwargs in function call

You can use *args  to pass elements in an iterable variable to a function. Following example will clear everything.

 1 2 3 4 5 def my_three(a, b, c):     print(a, b, c)   a = [1,2,3] my_three(*a) # here list is broken into three elements

Note: This works only when number of argument is same as number of elements in the iterable variable.

Similarly you can use **kwargs  to call a function like this

 1 2 3 4 5 def my_three(a, b, c):     print(a, b, c)   a = {'a': "one", 'b': "two", 'c': "three" } my_three(**a)

Note: For this to work 2 things are necessary:

1. Names of arguments in function must match with the name of keys in dictionary.
2. Number of arguments should be same as number of keys in the dictionary.