Open In App

*args and **kwargs in Python

Last Updated : 11 Dec, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

In Python, *args and **kwargs are used to allow functions to accept an arbitrary number of arguments. These features provide great flexibility when designing functions that need to handle a varying number of inputs.

Example:

Python
# *args example
def fun(*args):
    return sum(args)

print(fun(1, 2, 3, 4)) 
print(fun(5, 10, 15))   

# **kwargs example
def fun(**kwargs):
    for k, val in kwargs.items():
        print(k, val)

fun(a=1, b=2, c=3)

Output
10
30
a 1
b 2
c 3

Let’s explore *args and **kwargs in detail:

There are two special symbols to pass multiple arguments:

*args and **kwargs in Python

*args and **kwargs in Python

Special Symbols Used for passing arguments in Python:

  • *args (Non-Keyword Arguments)
  • **kwargs (Keyword Arguments)

Note: “We use the “wildcard” or “*” notation like this – *args OR **kwargs – as our function’s argument when we have doubts about the number of  arguments we should pass in a function.” 

Python *args

The special syntax *args in function definitions is used to pass a variable number of arguments to a function. It is used to pass a non-keyworded, variable-length argument list. 

  • For example, we want to make a multiply function that takes any number of arguments and is able to multiply them all together. It can be done using *args.
  • Using * the variable that we associate with the * becomes iterable, meaning you can do things like iterate over it, run some higher-order functions such as map and filter, etc.

Example 1:

Python program to illustrate *args for a variable number of arguments

python
def myFun(*argv):
    for arg in argv:
        print(arg)


myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

Output
Hello
Welcome
to
GeeksforGeeks

Example 2:

Python program to illustrate *args with a first extra argument.

Python
def fun(arg1, *argv):
    print("First argument :", arg1)
    for arg in argv:
        print("Argument *argv :", arg)


fun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

Output
First argument : Hello
Argument *argv : Welcome
Argument *argv : to
Argument *argv : GeeksforGeeks

Python **kwargs

The special syntax **kwargs in function definitions is used to pass a variable length argument list. We use the name kwargs with the double star **.

  • A keyword argument is where you provide a name to the variable as you pass it into the function.
  • It collects all the additional keyword arguments passed to the function and stores them in a dictionary.

Example 1: 

Python
def fun(**kwargs):
    for k, val in kwargs.items():
        print("%s == %s" % (k, val))


# Driver code
fun(s1='Geeks', s2='for', s3='Geeks')

Output
s1 == Geeks
s2 == for
s3 == Geeks

For s1=’Geeks’, s1 is key and ‘Geeks’ is a value. In simple words, what we assign is value and to whom we assign is key. 

Example 2:

Python
def fun(arg1, **kwargs):
    for k, val in kwargs.items():
        print("%s == %s" % (k, val))


# Driver code
fun("Hi", s1='Geeks', s2='for', s3='Geeks')

Output
s1 == Geeks
s2 == for
s3 == Geeks

Using both *args and **kwargs

We can use both *args and **kwargs in the same function to accept a mix of positional and keyword arguments.

Example:

Python
def fun(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

fun(1, 2, 3, a=4, b=5)

Output
Positional arguments: (1, 2, 3)
Keyword arguments: {'a': 4, 'b': 5}

In this example, the fun can handle both positional and keyword arguments. The args parameter collects positional arguments into a tuple, while the kwargs parameter collects keyword arguments into a dictionary.



Next Article
Article Tags :
Practice Tags :

Similar Reads