Skip to content

Easily Master Python Optional Arguments


Using Python Optional Arguments When Defining Functions

Defining your own functions is an essential skill for writing clean and effective code. In this tutorial, you’ll explore the techniques you have available for defining Python functions that take optional arguments. When you master Python optional arguments, you’ll be able to define functions that are more powerful and more flexible.

In this tutorial, you’ll learn:

  • What the difference is between parameters and arguments
  • How to define functions with optional arguments and default parameter values
  • How to define functions using args and kwargs
  • How to deal with error messages about optional arguments

To get the most out of this tutorial, you’ll need some familiarity with defining functions with required arguments.

Creating Functions in Python for Reusing Code

You can think of a function as a mini-program that runs within another program or within another function. The main program calls the mini-program and sends information that the mini-program will need as it runs. When the function completes all of its actions, it may send some data back to the main program that has called it.

The primary purpose of a function is to allow you to reuse the code within it whenever you need it, using different inputs if required.

When you use functions, you are extending your Python vocabulary. This lets you express the solution to your problem in a clearer and more succinct way.

In Python, by convention, you should name a function using lowercase letters with words separated by an underscore, such as do_something(). These conventions are described in PEP 8, which is Python’s style guide. You’ll need to add parentheses after the function name when you call it. Since functions represent actions, it’s a best practice to start your function names with a verb to make your code more readable.

Defining Functions With No Input Parameters

In this tutorial, you’ll use the example of a basic program that creates and maintains a shopping list and prints it out when you’re ready to go to the supermarket.

Start by creating a shopping list:

shopping_list = {
"Bread": 1,
"Milk": 2,
"Chocolate": 1,
"Butter": 1,
"Coffee": 1,

To create a function that prints out the shopping list, you can define it with no input parameters. This means that when you call the function, you don’t need to provide any arguments.

def print_shopping_list():
for item, quantity in shopping_list.items():
print(f"{item}: {quantity}")
# Call the function to print the shopping list

By defining a function, you can now easily print the shopping list whenever needed, without having to repeat the same code every time.

Defining Functions With Required Input Arguments

Sometimes, you may want to define a function that requires specific input arguments to work correctly.

For example, let’s say you want to create a function that calculates the area of a rectangle. In order to calculate the area, you need to know the length and width of the rectangle.

To define a function that requires input arguments, you can specify the names of the required parameters within the parentheses after the function name. When you call the function, you need to provide these arguments.

def calculate_rectangle_area(length, width):
area = length * width
return area
# Call the function with the required arguments
rectangle_area = calculate_rectangle_area(4, 5)

By defining the calculate_rectangle_area() function with required input arguments, you ensure that it can only be used correctly when the necessary information is provided.

Using Python Optional Arguments With Default Values

Python allows you to define functions that take optional arguments. Optional arguments are parameters that have default values assigned to them. If you don’t provide a value for an optional argument when calling the function, it will use the default value.

To define an optional argument, you can assign a default value to the parameter in the function definition. If no value is provided for that argument when calling the function, it will use the default value.

def greet_user(name="Guest"):
print(f"Hello, {name}!")
# Call the function without providing an argument
greet_user() # Output: Hello, Guest!
# Call the function with an argument
greet_user("John") # Output: Hello, John!

In the example above, the greet_user() function takes an optional argument name with a default value of “Guest”. If no argument is provided, it will use the default value and greet the user as “Guest”. If an argument is provided, it will use that value instead.

Common Default Argument Values

There are some common default values that are often used for optional arguments in Python functions. These include:

  • None: This is useful when an argument can be any data type or when there is no reasonable default value.
  • 0 or 1: These are often used as default values for numeric or boolean arguments.
  • Empty string or empty list: These are often used as default values for string or list arguments.

It’s important to choose appropriate default values that make sense for the specific use case of your function.

Data Types That Shouldn’t Be Used as Default Arguments

There are some data types in Python that should not be used as default arguments in functions. These include mutable data types such as lists or dictionaries.

When a function is defined, the default argument values are evaluated only once, when the function is defined. If you use a mutable data type as a default argument and modify it within the function, the modified value will persist across function calls.

def add_to_list(item, my_list=[]):
return my_list
print(add_to_list("apple")) # Output: ['apple']
print(add_to_list("banana")) # Output: ['apple', 'banana']

In this example, the add_to_list() function takes an item and appends it to a list. The default value for the my_list argument is an empty list. When the function is called repeatedly, the items are continuously added to the same list.

To avoid this issue, it’s recommended to use immutable data types as default arguments or use None as the default value and create a new list or object within the function if needed.

When working with functions that have optional arguments, you may encounter error messages related to input arguments if they are not provided correctly.

For example, if you call a function that requires an argument without providing it, you’ll get a TypeError:

def greet_user(name):
print(f"Hello, {name}!")
greet_user() # Output: TypeError: greet_user() missing 1 required positional argument: 'name'

In this case, the greet_user() function requires an argument name, but it is not provided when the function is called. To fix this error, you need to provide the required argument.

It’s important to carefully read and understand error messages to identify the cause of the issue and fix it accordingly.

Using args and kwargs

In addition to optional arguments with default values, Python also provides two special mechanisms for defining functions that can accept any number of arguments.

Functions Accepting Any Number of Arguments

Sometimes, you may want to define a function that can accept any number of positional arguments, regardless of their number. In Python, you can use the *args syntax to achieve this.

The *args parameter allows you to pass any number of arguments to the function as a tuple. Inside the function, you can loop over the tuple and perform operations on each argument.

def add_numbers(*args):
total = 0
for num in args:
total += num
return total
print(add_numbers(1, 2, 3)) # Output: 6
print(add_numbers(10, 20, 30, 40)) # Output: 100

In this example, the add_numbers() function takes any number of arguments, adds them up, and returns the total.

Functions Accepting Any Number of Keyword Arguments

In addition to accepting any number of positional arguments, you may also want to define a function that can accept any number of keyword arguments. In Python, you can use the **kwargs syntax to achieve this.

The **kwargs parameter allows you to pass any number of keyword arguments to the function as a dictionary. Inside the function, you can access the values of the keyword arguments using their respective keys.

def greet_people(**kwargs):
for name, age in kwargs.items():
print(f"{name} is {age} years old")
greet_people(John=25, Jane=30, Mark=40)

In this example, the greet_people() function takes any number of keyword arguments, prints out each person’s name and age.


In this tutorial, you’ve learned how to define Python functions with optional arguments using default values, as well as how to handle error messages related to input arguments. You’ve also explored using args and kwargs to create functions that can accept any number of arguments.

By mastering Python optional arguments, you can create more flexible and reusable functions that can adapt to different scenarios. This allows you to write cleaner and more efficient code.