DEV Community

Cover image for Python Functions *args and **kwargs Structure
Baransel
Baransel

Posted on

Python Functions *args and **kwargs Structure

Sign up to my newsletter!.

What are *args and **kwargs?

These structures are sometimes used when we do not know the number of parameters to import or the number of parameters varies. Thus, we bring dynamism to our function. Let's show it with an example; For example, let's write a function that sums the entered numbers.

def add(number1, number2):
    print(sum([number1, number2]))

add(6, 9)
Enter fullscreen mode Exit fullscreen mode

It works very well, so let's add another number, this time add three numbers.

def add(number1, number2):
    print(sum([number1, number2]))

add(6, 9, 1)
Enter fullscreen mode Exit fullscreen mode
TypeError: add() takes 2 positional arguments but 3 were given
Enter fullscreen mode Exit fullscreen mode

Yes, we got an error because we stated that it can take two parameters while writing the function, so let's fix it.

def add(number1, number2, number3):
    print(sum([number1, number2, number3]))

add(6, 9, 1)
Enter fullscreen mode Exit fullscreen mode

This is how we fixed it. This is not a correct usage because if I want to add two numbers together again, I will have to change the function again. The function I wrote here is just a function that adds two numbers, but I don't want that. I want to add 2 when I want and 10 when I want. Then we will use *args and **kwargs structures.

Using *args

def add(*args):
    print(sum(args))

add(6, 9, 1)
add(6, 9, 1, 10, 14)

# 16
# 40
Enter fullscreen mode Exit fullscreen mode

You can now enter as many numbers as you want. No matter how many numbers the function gets, it will do the necessary operations.

Using **kwargs

Yes, we learned what *args is and how to use it. But what is **kwargs? And what is the difference between them? Likewise, we use **kwargs in situations where we do not know how many parameters to use, but **kwargs is based on a key value relationship. Did you remember this from somewhere because this is nothing but the dictionary data type we are talking about. Let's show it with an example.

def printOutput(**kwargs):
    print(kwargs)

printOutput(number1 = 6, number2 = 9, number3 = 1) 

# {'number1': 6, 'number2': 9, 'number3': 1}
Enter fullscreen mode Exit fullscreen mode

As you can see, it returned us a dictionary data type as output.

Combining *args and **kwargs

Well, you have a question, can I use *args and **kwags parameters? Let's see now;

def printOutput(*args,**kwargs):
    print(kwargs)
    print(args)

printOutput(6, 9, 1, number = 6, number2 = 9, number3 = 2) 

# {'number': 6, 'number2': 9, 'number3': 2}
# (6, 9, 1)
Enter fullscreen mode Exit fullscreen mode

You might also like

Python Functions
Python File Operations
Python Set and Frozenset
Python dictionary and dictionary methods
Python tuple and tuple methods

Sign up to my newsletter!.

Top comments (0)