Python Function Arguments

In this section, you will learn Python function arguments and its different types such as default arguments, keyword arguments, and arbitrary arguments.

Python Function Arguments:

Arguments of function are the values on which the operations are performed inside the function.

When you define a function with a specified number of arguments, you have to call this particular function by passing that specified number of arguments.

If you pass more or fewer arguments than specified in the function definition, you will get a TypeError.

Consider the code below:

def language(p, n):
    """Function to print a message"""
    print("Programming language",n,"is:", p)
language('Python', 1)
language('Java', 2)
Programming language 1 is: Python
Programming language 2 is: Java

The function language has two arguments. And if you call the function with a different number of arguments, you will have an error as below:

>>> language('Python')

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    language('Python')
TypeError: language() takes exactly 2 arguments (1 given)

>>> language(2, 'Python', 'Java')

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    language(2, 'Python', 'Java')
TypeError: language() takes exactly 2 arguments (3 given)

Python Function Arguments Types:

The previous function has fixed number of arguments. And function could also have variable arguments.

There are three different ways to pass variable arguments to a function. Now let’s go through them all.

Python Function Default Arguments:

In a function, arguments can have default values which are assigned in the function definition. If the arguments have default value, then it is optional to pass values for those arguments:

This is demonstrated in the example below:

def language(p = 'C++', n = 3):
    """Function to print a message"""
    print("Programming language",n,"is:", p)
language()
Programming language 3 is: C++

You could see here that no argument is passed but the program still works fine; because default values for the arguments are provided. If you pass values for any of the arguments, the default value will be overwritten.

Python Function Keyword Arguments:

Normally, you pass multiple arguments in the same sequence as defined in the function definition. But if you use keyword arguments you can change the position of the arguments.

def language(p, n):
    """Function to print a message"""
    print("Programming language",n,"is:", p)
language(p = 'C++', n = 3)
Programming language 3 is: C++

You can also change the position of arguments if you use keyword arguments to assign values explicitly to the specific arguments.

def language(p, n):
    """Function to print a message"""
    print("Programming language",n,"is:", p)
language(n = 3, p = 'C++')
Programming language 3 is: C++

Python Function Arbitrary Arguments:

Arbitrary arguments are used when it is not known in advance that how many arguments should be passed.

An Arbitrary function is denoted by an asterisk * before the name of the argument. It passes non-keyworded arguments as a tuple to the function.

def language(*args):
    """Demo function of arbitray arguments"""
    for i in p:
        print("Programming language:", i)

language("Java", "C++", "R", "Kotlin")
Programming language: Java
Programming language: C++
Programming language: R
Programming language: Kotlin

The function is called by passing multiple arguments. These arguments are converted into a tuple before the function is actually called.

Double asterisk **kwargs is the idiom to pass the arbitrary keyword arguments to the function. For example,

def language(**kwargs):
    """Demo funciton of arbitrary keyword arguments"""
    for a in kwargs:
        print(a, kwargs[a])
        
language(country="NL", code="+31")
country NL
code +31

Arguments in this keyword arbitrary arguments are passed as a dictionary whose keys are keywords and values are corresponding values. Like in the above example, the passed arguments are converted to a dictionary {'country':"NL", 'code':"+31"}