Функция возвращающая два значения питон

Возвращение нескольких значений из функции в Python

Иногда программистам приходится столкнуться с ситуацией, когда функция должна возвращать несколько значений. Например, функция может вычислять несколько различных характеристик набора данных и должна возвращать все эти значения. В таких случаях есть несколько подходов, которые можно использовать в Python.

Использование кортежей

Самый простой способ — это использование кортежа. Например:

def calculate_metrics(data): metric1 = . metric2 = . metric3 = . return (metric1, metric2, metric3)

Здесь функция возвращает кортеж из трех значений. Однако этот подход может стать проблематичным, если функция должна возвращать большое количество значений, поскольку может быть сложно помнить, какое значение соответствует какому индексу в кортеже.

Использование словарей

Еще один подход — это использование словаря. Например:

def calculate_metrics(data): metric1 = . metric2 = . metric3 = . return

Здесь функция возвращает словарь, и значения метрик можно получить по их именам. Это делает код более читаемым, особенно если возвращается много значений.

Использование классов

Также можно использовать классы для возврата нескольких значений. Например:

class Metrics: def __init__(self, metric1, metric2, metric3): self.metric1 = metric1 self.metric2 = metric2 self.metric3 = metric3 def calculate_metrics(data): metric1 = . metric2 = . metric3 = . return Metrics(metric1, metric2, metric3)

Здесь функция возвращает экземпляр класса Metrics , и значения метрик можно получить через атрибуты этого класса.

Использование списков

Наконец, можно использовать списки для возврата нескольких значений. Например:

def calculate_metrics(data): metric1 = . metric2 = . metric3 = . return [metric1, metric2, metric3]

Однако, как и в случае с кортежами, может быть сложно помнить, какое значение соответствует какому индексу в списке, особенно если возвращается много значений.

Какой из этих подходов лучше использовать, во многом зависит от конкретной ситуации и предпочтений программиста.

Источник

Как вернуть сразу несколько значений из функции в Python 3

Сегодня мы делимся с вами переводом статьи, которую нашли на сайте medium.com. Автор, Vivek Coder, рассказывает о способах возврата значений из функции в Python и объясняет, как можно отличить друг от друга разные структуры данных.

Фото с сайта Unsplash. Автор: Vipul Jha

Читайте также:  All about html image

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. И, как вы видите, этих способов действительно много.

Читайте также:  Php sql value null

Учите матчасть и постоянно развивайте свои навыки программирования. Спасибо за внимание!

Источник

Использование объекта (object)

Это похоже на C/C++ и Java, мы можем создать класс (в C, структуру) для хранения нескольких значений и возврата объекта класса.

# A Python program to return multiple # values from a method using class class Test: def __init__(self): self.str = "string example" self.x = 20 # This function returns an object of Test def fun(): return Test() # Driver code to test above method t = fun() print(t.str) print(t.x)

Результат работы кода:

Использование кортежа (tuple)

Кортеж представляет собой последовательность элементов, разделенных запятыми. Он создается с или без (). Кортежи неизменны.

# A Python program to return multiple # values from a method using tuple # This function returns a tuple def fun(): str = "string example" x = 20 return str, x; # Return tuple, we could also # write (str, x) # Driver code to test above method str, x = fun() # Assign returned tuple print(str) print(x)

Результат работы кода:

Использование списка (list)

Список похож на массив элементов, созданный с помощью квадратных скобок. Они отличаются от массивов тем, что могут содержать элементы разных типов. Списки отличаются от кортежей тем, что они изменяемы.

# A Python program to return multiple # values from a method using list # This function returns a list def fun(): str = "string example" x = 20 return [str, x]; # Driver code to test above method list = fun() print(list)

Результат работы кода:

Использование словаря (dictionary)

Словарь похож на хэш или карту на других языках.

# A Python program to return multiple # values from a method using dictionary # This function returns a dictionary def fun(): d = dict(); d['str'] = "string example" d['x'] = 20 return d # Driver code to test above method d = fun() print(d)

Результат работы кода:

Использование класса данных (Data Class)

В Python 3.7 и более поздних версиях класс данных можно использовать для возврата класса с автоматически добавленными уникальными методами. Модуль класса данных имеет декоратор и функции для автоматического добавления сгенерированных специальных методов, таких как __init__() и __repr__() в пользовательские классы.

from dataclasses import dataclass @dataclass class Book_list: name: str perunit_cost: float quantity_available: int = 0 # function to calculate total cost def total_cost(self) -> float: return self.perunit_cost * self.quantity_available book = Book_list("Introduction to programming.", 300, 3) x = book.total_cost() # print the total cost # of the book print(x) # print book details print(book) # 900 Book_list(name='Python programming.', perunit_cost=200, quantity_available=3)

Результат работы кода:

900 Book_list(name='Introduction to programming.', perunit_cost=300, quantity_available=3) Book_list(name='Python programming.', perunit_cost=200, quantity_available=3)

Источник

Оцените статью