Python *args and **kwargs

Posted on Oct 31, 2019


What is *args?

The *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:

The 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 this func_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 that 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.

Other Tutorials (Sponsors)