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.