Skip to content

Understanding the Power of Python's 'return' Statement


The Python return Statement: Usage and Best Practices

The Python return statement is a crucial component of functions and methods in Python. It allows you to send objects back to the caller code and use them for further computation. In this tutorial, we will explore how to effectively use the return statement in Python functions, how to return single or multiple values, and the best practices to follow when using return statements.

Getting Started With Python Functions

Before diving into the details of the return statement, let’s start by understanding the basics of Python functions. Functions in Python are named code blocks that perform a specific computation. You can assign a name to a code block and reuse it from different parts of your code. Functions are widely used to organize and modularize your code, making it more readable and maintainable.

Understanding the Python return Statement

The return statement is used to specify the value that a function should send back to the caller code. When a function encounters a return statement, it immediately stops executing and returns the specified value. This value is known as the function’s return value.

Explicit return Statements

You can use an explicit return statement to explicitly specify the value that should be returned. For example, consider the following function that calculates the square of a number:

def square_number(number):
return number ** 2

In this case, the return statement is used to explicitly return the result of number ** 2 back to the caller code.

Implicit return Statements

If a function does not encounter an explicit return statement, it will implicitly return None, which is a special Python object representing the absence of a value. For example, consider the following function that prints a message:

def print_message(message):

In this case, since there is no explicit return statement, the function will implicitly return None after executing the print statement.

Returning vs Printing

It’s important to note the difference between returning a value and printing a value. When a value is returned, it can be further manipulated or used in other computations. On the other hand, when a value is printed, it is simply displayed for human-readable output.

Returning values allows you to store and use the result of a function, while printing values is mainly used for debugging or informative purposes.

Returning Multiple Values

Python functions can also return multiple values by separating them with commas. This can be achieved by returning a tuple, which is an ordered collection of objects. Here’s an example:

def get_name_and_age():
name = "John"
age = 30
return name, age

In this case, the function get_name_and_age() returns a tuple containing the values of name and age. You can then unpack this tuple into separate variables when calling the function:

name, age = get_name_and_age()

Now you can use the variables name and age in your code.

Using the Python return Statement: Best Practices

To ensure that your functions are Pythonic, readable, and robust, it’s important to follow some best practices when using the return statement.

Returning None Explicitly

If a function does not have a meaningful value to return, it’s considered good practice to explicitly return None. This makes it clear to both the developer and the caller code that the function intentionally does not produce a result.

Remembering the Return Value

When calling a function that returns a value, it’s essential to store or use that value appropriately. Failing to do so can result in bugs or unexpected behavior in your code.

Avoiding Complex Expressions

To enhance the readability and maintainability of your code, it’s recommended to avoid using complex expressions in return statements. Instead, break down complex computations into separate steps or helper functions for better clarity.

Returning Values vs Modifying Globals

In general, it’s better to return values from functions rather than modifying global variables directly. This helps encapsulate your code and make it more modular and reusable. However, there may be cases where modifying globals is necessary, but use it sparingly and when there’s a clear justification.

Using return With Conditionals

It’s common to use conditional statements (e.g., if, else) in functions. When using conditionals with the return statement, make sure to cover all possible code paths to avoid unexpected behavior. This includes handling all possible return values and ensuring that the return statements are placed correctly.

Returning True or False

In some cases, you may want your function to return a Boolean value (True or False). While it’s tempting to use an if statement followed by return True or return False, it’s more Pythonic to directly return the Boolean value based on the condition. This makes your code more concise and readable.

Short-Circuiting Loops

Sometimes, you may want to terminate a loop prematurely based on a condition. In such cases, you can use the return statement to exit the loop and return from the function at the same time. This can help optimize your code and make it more efficient.

Recognizing Dead Code

Dead code refers to code that is never executed because it is placed after a return statement or an unconditional branch. It’s important to recognize and remove dead code as it can clutter your codebase and make it harder to read and maintain.

Returning Multiple Named-Objects

Returning multiple values as a tuple is a common practice, but it may not be immediately clear what the values represent. To improve code clarity, consider returning a named object, such as a dictionary or a custom object, where the keys or attributes provide a meaningful description of the values.


The return statement is an essential tool in Python functions, allowing you to send objects back to the caller code and perform further computation. By understanding how to use the return statement effectively and following best practices, you can write more readable, maintainable, and concise functions in Python. Remember to explicitly return None when necessary, handle return values appropriately, avoid complex expressions, and use conditionals and loops in a well-defined manner. With these practices in mind, you can harness the power of the return statement and write robust Python code.