Understanding *args and **kwargs in Python

In Python programming, if you want to pass the variable number of arguments to a function you can do this by using special symbols. The two special symbols are given below.

  • *args (Non-keyword arguments)
  • **kwargs (Keyword arguments)

In this article, you will learn about *args and *kwargs and their usage in Python programming.

What do you mean by the variable number of arguments to a function

The variable number of arguments means you don’t know how many arguments a user will pass to the function. For example, suppose you want to make a program that takes two numbers from a user and returns their sum.

def add_two(a,b):
    return a+b
print(add_two(8,3))

This will print the sum of 8 and 3 here the number of arguments is fixed i.e. 2. In a variable number of arguments, the user can pass any number of arguments to the function.

Now in this example, what happens when a user wants to add three or more numbers he will pass 3 or more arguments to this function. Since function takes two arguments you will get the error like TypeError: add_two() takes two positional arguments but 3 were given.

Now let’s see how we can fix this by using *args and **kwargs in our program.

Python *args

If you are not sure about the number of arguments then use *args as a parameter while defining the function this will allow a user to pass a variable number of non-keyword arguments to the function.

The syntax is to use * with parameter name to take a variable number of arguments but by convention, it is often used with the args word. The passed arguments make a tuple inside the function.

Now see the given program –

Example 1:

def adder(*args):
sum=0
for n in args:
    sum+=n
return sum
print(adder(5,8,9))

Here you can enter any number of arguments the function will calculate their sum and return it.

Example 2:

The following example shows the use of *args with normal parameters.

def adder(num, *args):
     print(num)
     print(args)
adder(5,8,9,7,6)

When you execute this it will print one positional argument i.e. 5 and a tuple or variable arguments. You can see the output in the given image –

Please keep in mind always use normal parameters first and then use the variable for entering a variable number of arguments otherwise you will get an error.

Python **kwargs

A keyworded argument is where you provide a name to the variable when you pass it to a function. You can think of it as a dictionary that maps a keyword to a value.

The **(double star operator) with a parameter is used to pass a keyworded variable length of arguments. By convention ** is often used with kwargs word but you can use any other name also.

For example –

def func(**kwargs):
   for k,v in kwargs.items():
      print(f'{k}:{v}')
func(first_name='Vinay',last_name='Kumar')

When you run this program you will see –

The *args and **kwargs keywords make a function flexible. Now if you have any doubt then leave it in the comments below.

Leave a Comment