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 exampledeffun(*args):returnsum(args)print(fun(1,2,3,4))print(fun(5,10,15))# **kwargs exampledeffun(**kwargs):fork,valinkwargs.items():print(k,val)fun(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 PythonSpecial 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 definitionsis used to pass a variable number of arguments to a function. It is used to pass a non-keyworded, variable-length argument list. These arguments aregrouped into a tuple, allowing the function to handle any number of inputs.
For example, a multiply() function can use *args to accept any number of inputs and multiply them. The *makes the variable iterable, so it can be looped through or used with functions like map() and filter().
Example 1:
Python program to illustrate *args for a variable number of arguments
pythondefmyFun(*argv):forarginargv:print(arg)myFun('Hello','Welcome','to','GeeksforGeeks')
OutputHelloWelcometoGeeksforGeeks
Example 2:
Python program to illustrate *args with a first extra argument.
Pythondeffun(arg1,*argv):print("First argument :",arg1)forarginargv:print("Argument *argv :",arg)fun('Hello','Welcome','to','GeeksforGeeks')
OutputFirst argument : HelloArgument *argv : WelcomeArgument *argv : toArgument *argv : GeeksforGeeks
Python **kwargs
The special syntax**kwargs in function definitions is used to pass a variable length argument list. We use the namekwargs 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 andstores them in a dictionary.
Example 1:
Pythondeffun(**kwargs):fork,valinkwargs.items():print("%s ==%s"%(k,val))# Driver codefun(s1='Geeks',s2='for',s3='Geeks')
Outputs1 == Geekss2 == fors3 == 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:
Pythondeffun(arg1,**kwargs):fork,valinkwargs.items():print("%s ==%s"%(k,val))# Driver codefun("Hi",s1='Geeks',s2='for',s3='Geeks')
Outputs1 == Geekss2 == fors3 == 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:
Pythondeffun(*args,**kwargs):print("Positional arguments:",args)print("Keyword arguments:",kwargs)fun(1,2,3,a=4,b=5)
OutputPositional 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.