*args and **kwargs in Python

PythonServer Side ProgrammingProgramming

When we define a function in a python program, the purpose is to execute the code again and again by supplying different values to the function's arguments. One challenge in this design is, what if we are not sure about the number of arguments we want to process each time we call that function. This is where the special arguments called **args and **kwargs are needed. Let's look at them one by one.


The *args enables us to use variable number of arguments as input to the function. In the below example we are finding out the result of multiplication of a series of numbers. The count of these numbers vary each time we call the function.


def findproduct(*many_nums):
result = 1
for num in many_nums:
result = result * num
print("Multiplication result:",result)



Running the above code gives us the following result −

('Multiplication result:', 27)
('Multiplication result:', 220)


Next, there are scenarios when we want to pass keyword arguments, which are basically key-value pairs as arguments to a function.

Here again, we can pass the variable number of such keyword arguments to the function. Such arguments are named as **kwargs. Please note there are two asterisks when using such arguments. In reality, such keyword arguments are passed on to the program as a python dictionary which holds a number of key-value pairs.


def country_details(**state_info):
   for k,v in state_info.items():
      print("{} is {}".format(k,v))

country_details(StateName="Telangana", Capital="Hyderabad",Population=3400000)
country_details(StateName="Andhra Pradesh", Capital="Amaravati",Population=1000000,ForestCoverage="30%")


Running the above code gives us the following result −

StateName is Telangana
Population is 3400000
Capital is Hyderabad

StateName is Andhra Pradesh
Population is 1000000
ForestCoverage is 30%
Capital is Amaravati
Published on 08-Jul-2019 18:25:19