How to Return Multiple Values from a Function in Python
If you want one Python function to give back more than one result, the most common solution is simple: return the values separated by commas.
In practice, Python usually packs those values into a tuple. You can then unpack that tuple into separate variables.
Quick answer
def get_name_and_age():
return "Alice", 25
name, age = get_name_and_age()
print(name)
print(age)
Output:
Alice
25
In Python, returning multiple values usually means returning a tuple. You can unpack the result into separate variables.
What this page helps you do
This page shows you how to:
- Return two or more values from one function
- Store the returned values in separate variables
- Understand that Python usually returns a tuple
- Choose between a tuple, list, or dictionary based on clarity
If you are new to functions, see Python functions explained first.
The simplest way: return values separated by commas
The easiest way to return multiple values is to put them after return, separated by commas.
def get_coordinates():
return 10, 20
result = get_coordinates()
print(result)
print(type(result))
Output:
(10, 20)
<class 'tuple'>
Even though you wrote return 10, 20, Python created one tuple containing both values.
This works well when:
- You have a small number of returned values
- The meaning of each value is clear
- The order is easy to remember
Here is another example:
def get_min_and_max():
return 3, 9
values = get_min_and_max()
print(values)
Output:
(3, 9)
If you want to understand function return values more clearly, read return values in Python functions.
How to unpack the returned values
Unpacking means storing each returned item in its own variable.
def get_name_and_age():
return "Alice", 25
name, age = get_name_and_age()
print(name)
print(age)
Output:
Alice
25
This is often easier to read than using a single variable:
def get_name_and_age():
return "Alice", 25
result = get_name_and_age()
print(result[0])
print(result[1])
Output:
Alice
25
Unpacking is usually better for beginners because the variable names make the result clearer.
Important rule
The number of variables must match the number of returned values.
This works:
def get_dimensions():
return 1920, 1080
width, height = get_dimensions()
print(width)
print(height)
This does not work:
def get_dimensions():
return 1920, 1080
width = get_dimensions()
The code above is valid Python, but width will contain the whole tuple, not just the first value.
If you actually want separate values, you must unpack them.
Returning a tuple explicitly
You can also write the tuple with parentheses.
def get_status():
return ("success", 200)
message, code = get_status()
print(message)
print(code)
Output:
success
200
This behaves the same as:
def get_status():
return "success", 200
In most cases, parentheses are optional. Many programmers still use them because they make it more obvious that the function returns a tuple.
If tuples are new to you, see what is a tuple in Python.
When to return a list or dictionary instead
A tuple is not always the clearest choice.
Return a list when you have similar items
Use a list when the function returns a collection of values of the same kind.
def get_scores():
return [85, 90, 78]
scores = get_scores()
print(scores)
Output:
[85, 90, 78]
A list makes sense here because the result is one group of similar items.
Return a dictionary when names matter
Use a dictionary when each returned value needs a label.
def get_user():
return {
"name": "Alice",
"age": 25,
"country": "Canada"
}
user = get_user()
print(user["name"])
print(user["age"])
print(user["country"])
Output:
Alice
25
Canada
A dictionary is often easier to read when:
- You return many values
- The order is hard to remember
- The meaning of each value matters more than position
Compare these two styles:
def get_user_tuple():
return "Alice", 25, "Canada"
name, age, country = get_user_tuple()
print(name, age, country)
def get_user_dict():
return {"name": "Alice", "age": 25, "country": "Canada"}
user = get_user_dict()
print(user["name"], user["age"], user["country"])
Both work. Choose the one that makes your code easier to understand.
Common errors when returning multiple values
There are a few beginner mistakes to watch for.
Unpacking into too many variables
def get_point():
return 5, 10
x, y, z = get_point()
This raises a ValueError because the function returned only 2 values, but you tried to store them in 3 variables.
Unpacking into too few variables
def get_point():
return 5, 10
x = get_point()
print(x)
This does not raise an error, but x becomes the whole tuple:
(5, 10)
The real unpacking error happens when you do this:
def get_point():
return 5, 10
x, = get_point()
This raises a ValueError because Python expected 1 value but got 2.
For fixes, see:
Returning different numbers of values
Be careful not to return 1 value in one case and 2 values in another.
def get_data(found):
if found:
return "Alice", 25
return "Not found"
This can confuse the code that calls the function:
name, age = get_data(False)
That code will fail because the function did not always return the same kind of result.
A clearer version would be:
def get_data(found):
if found:
return "Alice", 25
return None, None
name, age = get_data(False)
print(name)
print(age)
Output:
None
None
Forgetting the return order
If your function returns values in a fixed order, make sure that order stays consistent.
def get_size():
return 800, 600 # width, height
width, height = get_size()
If you later change the function to return height first, your code may still run but produce wrong results.
Best practices for beginners
When returning multiple values from a function:
- Keep the return order consistent
- Use tuple unpacking for short, simple results
- Use dictionaries when names matter more than order
- Use clear variable names
- Keep the returned structure the same in all code paths
Good example:
def get_product():
return "Book", 12.99
product_name, price = get_product()
print(product_name)
print(price)
Less clear example:
def get_product():
return "Book", 12.99
x, y = get_product()
print(x)
print(y)
The second example works, but x and y do not tell the reader what the values mean.
Common mistakes
These problems often cause confusion:
- Trying to use multiple variables without unpacking the returned result
- Returning a different number of values in different code paths
- Confusing tuple return values with separate return statements
- Using unclear value order such as
return x, ywithout meaningful names
If you want a refresher on what a return value is, read what is a return value in Python.
FAQ
Does Python really return multiple values?
Usually, Python returns one tuple object that contains multiple values.
Do I need parentheses when returning multiple values?
No. Parentheses are optional in most return statements, but they can improve readability.
Can I return a list instead of a tuple?
Yes. A list is useful when you want a collection of similar items that may be changed later.
Why do I get "too many values to unpack"?
Your function returned more items than the number of variables on the left side.
What is the clearest way to return many related values?
For more complex results, a dictionary is often easier to read because each value has a key.