How to return all variables from a function in Python?
In Python, you can return multiple variables from a function by separating them with commas in the return statement. These will be returned as a tuple. You can unpack the results into multiple variables when calling the function.
Here’s a minimal example:
def func(a, b): return a, b x, y = func('hello', 42) print(x) # hello print(y) # 42
Keep reading if you want to improve your Python skills and dive deeper into several border cases and special cases! You can also download our Python cheat sheets for fun and learning here: 👇
First, A Few Words on Functions and Variables …

In Python, a function is a group of related statements that perform a specific task. Functions help break our program into smaller, more manageable, and reusable modules of code.
To define a function in Python, we use the def
keyword followed by the function’s name, a set of parameters (if necessary), and a colon. The function’s body, containing indented statements, follows the colon.
A variable is a named location in memory that stores a value. Python variables can store different types of data, such as strings, integers, floating-point numbers, and objects. Y
ou can create a variable by assigning a value to it using the equals sign =
. For example, x = 5
assigns the integer value ‘5
‘ to the variable ‘x
‘.
In Python, we can return values from a function using the return
statement followed by the value or expression to be returned. Returning a value allows you to use the result of a function elsewhere in your code, ensuring modularity and maintainability.
Here’s an example:
def add_numbers(x, y): sum = x + y return sum result = add_numbers(3, 5) print(result)
The output will be 8
. The function add_numbers
returns the sum of the two input arguments x
and y
, and the print()
statement displays the result.
Python functions can return different data types, like int
, str
, list
, and more complex types such as custom objects and classes.
💡 A class
is a code template for creating objects in Python, which are the instances of a class. Classes have methods (functions) and attributes (variables) that allow you to represent and interact with the data being stored within the object.
Here’s a simple example using a class to create a ‘Person
‘ object:
class Person: def __init__(self, name, age): self.name = name self.age = age def get_name(self): return self.name person = Person("John", 25) person_name = person.get_name() print(person_name)
The output will be John
. The get_name
method returns the value of the name
attribute of the Person
object.
In some cases, you may need a function to return multiple values. One common approach is to return a list containing multiple values.
Here’s an example:
def calculate_area_and_perimeter(width, height): area = width * height perimeter = 2 * (width + height) return [area, perimeter] result = calculate_area_and_perimeter(3, 4) print("Area:", result[0], "Perimeter:", result[1])
The output will be Area: 12 Perimeter: 14
. The function calculate_area_and_perimeter
returns a list containing both the calculated area and perimeter values of a rectangle.
Ways to Return Multiple Variables
Python functions can return multiple values, making it simpler than in other programming languages. We will explore three common methods of returning multiple variables from a function: using tuples, using lists, and using dictionaries.
Method 1: Using Tuples
Tuples are a convenient way to return multiple values from a function. When returning values as a tuple, you implicitly or explicitly create a tuple with the target variables.
Here’s an example:
def example_function(x): a = x + 1 b = x * 2 c = x ** 2 return a, b, c result = example_function(5) print(result) # Output: (6, 10, 25)
You can also unpack the tuple directly into individual variables:
a, b, c = example_function(5) print(a, b, c) # Output: 6 10 25
💡 Recommended: Python Return Tuple From Function
Method 2: Using Lists
Another way to return multiple values from a function is by using lists. Create a list with the values to be returned, and retrieve them through list indexing or looping.
Here’s an example:
def example_function(x): a = x + 1 b = x * 2 c = x ** 2 return [a, b, c] result = example_function(5) print(result) # Output: [6, 10, 25]
Access the individual elements using list indexing:
print(result[0], result[1], result[2]) # Output: 6 10 25
Method 3: Using Dictionaries
Dictionaries provide a more expressive way to return multiple values from a function. With dictionaries, each return value is associated with a key, improving readability.
Here’s an example of how to add multiple values to a key in a Python dictionary:
def example_function(x): a = x + 1 b = x * 2 c = x ** 2 return {'a': a, 'b': b, 'c': c} result = example_function(5) print(result) # Output: {'a': 6, 'b': 10, 'c': 25}
Access the individual values using their keys:
print(result['a'], result['b'], result['c']) # Output: 6 10 25
This section has demonstrated the different methods of returning multiple variables from a Python function. Remember that each method has its use cases, and it’s essential to choose the one that fits your specific requirements.
Python Scopes and Variable Visibility
In Python, variables have their existence in different scopes. Scopes help to define the visibility and lifetime of a variable. There are three main types of scopes in Python: global, local, and nonlocal.
Global Variables
Global variables are variables declared outside of any function. They can be accessed from any part of the code throughout the program. Although using global variables can sometimes be less efficient than accessing local scope, they are useful when you need to store or share data across different parts of your code.
Here’s an example of a global variable:
count = 0 def increment_count(): global count count += 1
In this example, count
is a global variable accessible from within the increment_count()
function. The global
keyword is used to indicate that count
is a global variable.

💡 Recommended: How to Return a Global and Local Variable from a Python Function?
Local Variables
Local variables are declared within a function and can only be accessed within the scope of that function. They have a limited lifetime, which starts when the function is called and ends when the function returns. Local variables help to prevent unwanted side effects while maintaining readability and efficiency in your code.
For example, here’s a function with a local variable:
def print_info(): message = "This is a local variable." print(message) print_info() # Prints: This is a local variable.
In this example, message
is a local variable and can only be accessed within the print_info()
function.
Nonlocal Variables
Nonlocal variables are variables declared in an outer function’s scope but used within an inner function. They allow you to share values across nested functions without making them global. Nonlocal variables are useful when you need to maintain state or iterate over a sequence of pairs of values in nested loops.
Here’s an example of a nonlocal variable:
def outer_function(): counter = 0 def inner_function(): nonlocal counter counter += 1 inner_function() print(counter) outer_function() # Prints: 1
In this example, the counter
variable is defined in the outer_function()
scope but is used within the inner_function()
scope. The nonlocal
keyword is used to indicate that counter
is a nonlocal variable.
Handling Exceptions and Errors
Exception Handling
When working with functions in Python, it is essential to handle potential exceptions and errors that can occur during the execution of code. The try
and except
statements come in handy for this. The code inside the try
block is executed, and if an exception occurs, the code inside the except
block is executed.
For example:
def divide(a, b): try: result = a / b except ZeroDivisionError: print("You can't divide by zero!") return None else: return result
In this example, if a division by zero occurs, a ZeroDivisionError
is raised, which is handled by the except
block, and a message is displayed to the user.
Custom Exceptions
While Python has built-in exceptions, you might encounter situations where creating custom exceptions can make your code more readable and easier to maintain. To create a custom exception, you can simply define a new class that inherits from the Exception
class.
class CustomError(Exception): pass
You can now raise this custom exception using the raise
keyword:
def validate_input(input_value): if input_value < 0: raise CustomError("Input value must be positive.")
In the validate_input
function, the custom exception CustomError
is raised if the input value is negative. You can catch and handle this custom exception just like any other exception:
try: validate_input(-5) except CustomError as e: print(e)
This approach allows for more specific error messages and better control over error handling in your functions.
Best Practices for Python Functions
When writing Python functions, it’s essential to follow best practices to ensure your code is maintainable, efficient, and follows common coding standards. One crucial aspect of this is how you handle returning values from your functions.
In many programming languages, functions can return single variables or even multiple values. In Python, you can return multiple values as a tuple by separating them with commas. For instance, you can use the min()
, sum()
, and round()
functions within your function and return their respective outputs like this:
def multi_result(x, y, z): return min(x, y, z), sum(x, y, z), round((x + y + z) / 3)
To improve the readability and maintainability of your code, consider using decorators.
💡 Decorators are functions that can transform or modify other functions. An example of a commonly used decorator is @property
, which allows you to access a method like an attribute without calling it explicitly.
class Circle: def __init__(self, radius): self._radius = radius @property def radius(self): return self._radius @property def area(self): return 3.14 * (self._radius ** 2)
In this example, you can access the radius
and area
attributes of a Circle
object without calling a function explicitly. This can lead to cleaner and more concise code.
Frequently Asked Questions
How do you return multiple values from a function in Python?
To return multiple values from a function in Python, you can use tuples. Simply separate the values you want to return using commas. Here’s an example:
def multiple_values(): return "value1", "value2", "value3" val1, val2, val3 = multiple_values()
What is the best way to unpack a returned tuple?
You can unpack a returned tuple using multiple assignment. This assigns the returned tuple elements to respective variables, like so:
def return_tuple(): return ("first_name", "last_name", 30) first_name, last_name, age = return_tuple()
Can a for loop be used to return multiple variables?
No, a for loop cannot directly return multiple variables. However, you can use a for loop to build a collection (e.g., list or tuple) containing multiple variables and then return that collection. For example:
def return_variables(n): variables = [] for i in range(n): variables.append(i) return tuple(variables) result = return_variables(3)
How do you declare multiple return values in a function?
In Python, you don’t explicitly declare the return values. Instead, you can return multiple values using a tuple, which can be returned directly or packed inside another data structure such as a list or a dictionary. Here’s an example:
def calculate_area_and_perimeter(height, width): area = height * width perimeter = 2 * (height + width) return area, perimeter
What is the role of global variables in returning multiple values?
Global variables can be used to store values that need to be accessible outside of a function, but it’s generally not recommended to use them for returning multiple values. Using global variables can lead to debugging difficulties and might not ensure a clean separation of your code. Returning multiple values using tuples or other data structures is a more Pythonic approach.
How can you return multiple lists from a function in Python?
To return multiple lists from a function, you can use tuples, like you would with multiple values. Here’s an example:
def return_multiple_lists(): list1 = [1, 2, 3] list2 = ["a", "b", "c"] return list1, list2 first_list, second_list = return_multiple_lists()
💡 Recommended: The Most Profitable Programming Languages in the World

While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.
To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.
His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.