[Python, Программирование] Как вернуть сразу несколько значений из функции в Python 3 (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 4 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
28-Авг-2020 15:38

Сегодня мы делимся с вами переводом статьи, которую нашли на сайте 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), заключенные в фигурные скобки ({}).
Словари, на мой взгляд, это оптимальный вариант для работы, если вы знаете ключ для доступа к значениям. Далее представлен словарь, где ключом является имя человека, а соответствующим значением — возраст.
people={
  'Robin': 24,
  'Odin': 26,
  'David': 25
}

А теперь перейдем к функции, которая возвращает словарь с парами «ключ — значение».
# 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)
# {'Bob': 27, 'Jack': 30, 'Kim': 28}

Способ 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).
На этом примере кортеж используется для хранения данных о сотруднике (имя, опыт работы в годах и название компании).
Bob = ("Bob", 7, "Google")

А вот пример написания функции для возврата кортежа.
# 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. И, как вы видите, этих способов действительно много.
Учите матчасть и постоянно развивайте свои навыки программирования. Спасибо за внимание!
===========
Источник:
habr.com
===========

===========
Автор оригинала: Vivek Coder
===========
Похожие новости: Теги для поиска: #_python, #_programmirovanie (Программирование), #_python_3, #_python, #_programmirovanie_dlja_nachinajuschih (программирование для начинающих), #_programmirovanie (программирование), #_funktsii (функции), #_data_science, #_blog_kompanii_plarium (
Блог компании Plarium
)
, #_python, #_programmirovanie (
Программирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 06-Июл 23:55
Часовой пояс: UTC + 5