- Multiple return
- Example
- Introduction
- Multiple return
- Exercise
- Как вернуть сразу несколько значений из функции в Python 3
- Способ 1: возврат значений с помощью словарей
- Способ 2: возврат значений с помощью списков
- Способ 3: возврат значений с помощью кортежей
- Способ 4: возврат значений с помощью объектов
- Способ 5: возврат значений с помощью классов данных (Python 3.7+)
- Вывод
- How to Return Multiple Values from a Python Function
- How Does Returning Multiple Values Work in Python
- Tuples in Python
- How to Access a Tuple Value in Python
- Tuple Destructuring in Python
- How to Return Multiple Values from a Function
- Conclusion
- Further Reading
Multiple return
Python functions can return multiple variables. These variables can be stored in variables directly. A function is not required to return a variable, it can return zero, one, two or more variables.
This is a unique property of Python, other programming languages such as C++ or Java do not support this by default.
Example
Introduction
Variables defined in a function are only known in the function. That’s because of the scope of the variable. In general that’s not a problem, unless you want to use the function output in your program.
In that case you can return variables from a function. In the most simple case you can return a single variable:
def complexfunction(a,b):
sum = a +b
return sum
Call the function with complexfunction(2,3) and its output can be used or saved.
But what if you have multiple variables in a function that you want access to?
Multiple return
Create a function getPerson(). As you already know a function can return a single variable, but it can also return multiple variables.
#!/usr/bin/env python3
def getPerson():
name = «Leona»
age = 35
country = «UK»
return name,age,country
name,age,country = getPerson()
print(name)
print(age)
print(country)
Exercise
After completing these continue with the next exercise.
How to Slice Lists/Arrays in Python
Python Scope of Variables
Как вернуть сразу несколько значений из функции в Python 3
Сегодня мы делимся с вами переводом статьи, которую нашли на сайте medium.com. Автор, Vivek Coder, рассказывает о способах возврата значений из функции в Python и объясняет, как можно отличить друг от друга разные структуры данных.
Фото с сайта Unsplash. Автор: Vipul Jha
Python удобен в том числе тем, что позволяет одновременно возвращать из функции сразу несколько значений. Для этого нужно воспользоваться оператором return и вернуть структуру данных с несколькими значениями — например, список общего количества рабочих часов за каждую неделю.
def hours_to_write(happy_hours): week1 = happy_hours + 2 week2 = happy_hours + 4 week3 = happy_hours + 6 return [week1, week2, week3] print(hours_to_write(4)) # [6, 8, 10]
Структуры данных в Python используются для хранения коллекций данных, которые могут быть возвращены посредством оператора return . В этой статье мы рассмотрим способы возврата нескольких значений с помощью подобных структур (словарей, списков и кортежей), а также с помощью классов и классов данных (Python 3.7+).
Способ 1: возврат значений с помощью словарей
Словари содержат комбинации элементов, которые представляют собой пары «ключ — значение» ( key:value ), заключенные в фигурные скобки ( <> ).
Словари, на мой взгляд, это оптимальный вариант для работы, если вы знаете ключ для доступа к значениям. Далее представлен словарь, где ключом является имя человека, а соответствующим значением — возраст.
А теперь перейдем к функции, которая возвращает словарь с парами «ключ — значение».
# A Python program to return multiple values using dictionary # This function returns a dictionary def people_age(): d = dict(); d['Jack'] = 30 d['Kim'] = 28 d['Bob'] = 27 return d d = people_age() print(d) #
Способ 2: возврат значений с помощью списков
Списки похожи на массивы, сформированные с использованием квадратных скобок, однако они могут содержать элементы разных типов. Списки также отличаются от кортежей, поскольку являются изменяемым типом данных. То есть любой список может меняться.
Списки — одна из наиболее универсальных структур данных в Python, потому что им не обязательно сохранять однородность (в них можно включать строки, числа и элементы). Иногда списки даже используют вместе со стеками или очередями.
# A Python program to return multiple values using list def test(): str1 = "Happy" str2 = "Coding" return [str1, str2]; list = test() print(list) # ['Happy', 'Coding']
Вот пример, где возвращается список с натуральными числами.
def natural_numbers(numbers = []): for i in range(1, 16): numbers.append(i) return numbers print(natural_numbers()) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Способ 3: возврат значений с помощью кортежей
Кортежи — это упорядоченные неизменяемые объекты в Python, которые обычно используются для хранения коллекций неоднородных данных.
Кортежи напоминают списки, однако их нельзя изменить после того, как они были объявлены. А еще, как правило, кортежи быстрее в работе, чем списки. Кортеж можно создать, отделив элементы запятыми: x, y, z или (x, y, z) .
На этом примере кортеж используется для хранения данных о сотруднике (имя, опыт работы в годах и название компании).
А вот пример написания функции для возврата кортежа.
# A Python program to return multiple values using tuple # This function returns a tuple def fun(): str1 = "Happy" str2 = "Coding" return str1, str2; # we could also write (str1, str2) str1, str2= fun() print(str1) print(str2) # Happy Coding
Обратите внимание: мы опустили круглые скобки в операторе return , поскольку для возврата кортежа достаточно просто отделить каждый элемент запятой (как показано выше).
Не забывайте, что кортеж можно создать с помощью запятой вместо круглых скобок. Круглые скобки требуются только в тех случаях, когда используются пустые кортежи или вам нужно избежать синтаксической неточности.
Чтобы лучше разобраться в кортежах, обратитесь к официальной документации Python 3 (документация приведена на английском языке. — Прим. ред.).
Ниже показан пример функции, которая использует для возврата кортежа круглые скобки.
def student(name, class): return (name, class) print(student("Brayan", 10)) # ('Brayan', 10)
Повторюсь, кортежи легко перепутать со списками (в конце концов, и те, и другие представляют собой контейнер, состоящий из элементов). Однако нужно помнить о фундаментальном различии: кортежи изменить нельзя, а списки — можно.
Способ 4: возврат значений с помощью объектов
Тут все так же, как в C/C++ или в Java. Можно просто сформировать класс (в C он называется структурой) для сохранения нескольких признаков и возврата объекта класса.
# A Python program to return multiple values using class class Intro: def __init__(self): self.str1 = "hello" self.str2 = "world" # This function returns an object of Intro def message(): return Intro() x = message() print(x.str1) print(x.str2) # hello world
Способ 5: возврат значений с помощью классов данных (Python 3.7+)
Классы данных в Python 3.7+ как раз помогают вернуть класс с автоматически добавленными уникальными методами, модулем typing и другими полезными инструментами.
from dataclasses import dataclass @dataclass class Item_list: name: str perunit_cost: float quantity_available: int = 0 def total_cost(self) -> float: return self.perunit_cost * self.quantity_available book = Item_list("better programming.", 50, 2) x = book.total_cost() print(x) print(book) # 100 Item_list(name='better programming.', perunit_cost=50, quantity_available=2)
Чтобы лучше разобраться в классах данных, обратитесь к официальной документации Python 3 (документация приведена на английском языке. — Прим. ред.).
Вывод
Цель этой статьи — ознакомить вас со способами возврата нескольких значений из функции в Python. И, как вы видите, этих способов действительно много.
Учите матчасть и постоянно развивайте свои навыки программирования. Спасибо за внимание!
How to Return Multiple Values from a Python Function
For instance, let’s create a function that takes two numbers as arguments. This function returns the sum, difference, multiplication, and division between these two numbers.
Here is how it looks in the code:
def operate(a, b): sum = a + b diff = a - b mul = a * b div = a / b return sum, diff, mul, div
Now you can call this function for two numbers and assign the return values to variables:
n1 = 5 n2 = 10 sum, diff, mul, div = operate(n1, n2) print( f"The sum is \n" f"The difference is \n" f"The multiplication gives \n" f"The division gives \n" )
This results in the following being printed in the console:
The sum is 15 The difference is -5 The multiplication gives 50 The division gives 0.5
How Does Returning Multiple Values Work in Python
In the previous section, you learned how to return multiple values by comma-separating the values.
But why and how does it work?
Tuples in Python
The example code works because it returns a tuple.
In case you don’t know what a tuple is, check out this in-depth article. In short, a tuple is a group of zero or more elements.
For instance, here is an example of a tuple of three values that represents a 3D point:
Notice that Python tuples do not always need parenthesis.
For example, you can write the above 3D point as:
This creates the same tuple of three values that represent a 3D point.
How to Access a Tuple Value in Python
To access and store a value from a tuple you can access it like you would access a value from a list. In other words, use the [] operator with an index.
For example, let’s store the 3D points into variables x, y, and z:
coords = 1, 1, 3 x = coords[0] y = coords[1] z = coords[2] print(x, y, z)
This results in the following output in the console:
This works fine, but there is an easier way for this particular purpose.
Tuple Destructuring in Python
You can use tuple destructuring to access tuple values and store them into variables.
Tuple destructuring means you declare a bunch of comma-separated variables in one line and assign each tuple value to the corresponding variable. This saves you lines of code meanwhile it also makes the intention very clear.
For instance, in the previous example, you stored 3D coordinates x, y, and z on separate lines using the [] operator. Instead of doing it this way, you can utilize tuple destructuring as a shorthand:
coords = 1, 1, 3 x, y, z = coords print(x, y, z)
As a result, each coordinate in the 3D point is assigned to a separate variable.
As you can see, the first value of the tuple was attached to variable x, the second one to y, and the third one to z.
Now you understand how tuples are created and how values are read from them.
How to Return Multiple Values from a Function
To return multiple values from a function, return the values as a tuple. To then access/store these values into variables, use tuple destructuring.
If you now look at the example you saw in the introduction:
def operate(a, b): sum = a + b diff = a - b mul = a * b div = a / b return sum, diff, mul, div
You recognize this function returns a tuple of four values. To access these four values, you use tuple restructuring. Here’s how it looks in code:
n1 = 5 n2 = 10 sum, diff, mul, div = operate(n1, n2) print( f"The sum is \n" f"The difference is \n" f"The multiplication gives \n" f"The division gives \n" )
The sum is 15 The difference is -5 The multiplication gives 50 The division gives 0.5
Now the returned tuple values are stored in the variables sum, diff, mul, and div.
Destructuring a returned tuple this way is handy. You don’t need to use the square-bracket accessing operator to manually pick the values from the tuple. Instead, the destructuring syntax takes care of that.
Conclusion
To return multiple values from a function in Python, return a tuple of values.
As you may know, a tuple is a group of comma-separated values. You can create a tuple with or without parenthesis. To access/store the multiple values returned by a function, use tuple destructuring.
Thanks for reading. Happy coding!