Как вернуть сразу несколько значений из функции в 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 ), заключенные в фигурные скобки ( <> ).
Словари, на мой взгляд, это оптимальный вариант для работы, если вы знаете ключ для доступа к значениям. Далее представлен словарь, где ключом является имя человека, а соответствующим значением — возраст.
people=
А теперь перейдем к функции, которая возвращает словарь с парами «ключ — значение».
# 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) .
На этом примере кортеж используется для хранения данных о сотруднике (имя, опыт работы в годах и название компании).
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. И, как вы видите, этих способов действительно много.
Учите матчасть и постоянно развивайте свои навыки программирования. Спасибо за внимание!
- python 3
- python
- программирование для начинающих
- программирование
- функции
- data science
- Блог компании Plarium
- Python
- Программирование
Как записать в переменную уравнения с неизвестными параметрами для дальнейшего их нахождения?
И тут мне нужно найти значение альфа которое берется из следующего уравнения(тут псевдокод):
Xk[0] = Xk[0] + Pk[0]*α Xk[1] = Xk[1] + Pk[1]*α
И вот тут то мне и надо каким то образом записать это уравнение с неизвестным еще «α»(которое я в дальнейшем найду понятное дело), и вот вопрос в том как записать это уравнение в самом коде для его дальнейшего решения?
Как присвоить диапазон значений переменной в Python?
Доброго времени суток. Интересует возможность в python’e присвоение переменной значения в определённом промежутке. Каким способом возможно это реализовать?
Более детально: Необходимо обозначить рамки допустимых значений
norm_x= (тут каким то чудесным образом объявляется промежуток) if x!=norm_x: print('Переменная x за пределом допустимых значений')
В программировании новичок, так что не пинайте) Функция range() если я правильно понял, не удовлетворит мои потребности.
- Вопрос задан более трёх лет назад
- 38512 просмотров
1 комментарий
Простой 1 комментарий
Переменные в Питоне
На курсе «Программирование на Питоне» мы во многом продолжим изучать то, о чем узнали на вводном курсе, но на гораздо более детальном уровне. И начнем мы этот путь с того, что еще раз взглянем на переменные в Питоне.
Перед прохождением этого занятия рекомендую изучить первый раздел вводного курса или, как минимум, познакомиться с программой Google Colab, которую мы используем в нашей работе, а также повторить основы программирования.
Содержание занятия
- Как объявить переменную в Питоне
- Автоматическое определение типа данных
- Как узнать тип переменной в Питоне
- Присвоение и преобразование типа данных
- Именование переменных
- Подведем итог
- Вопросы для закрепления
Как объявить переменную в Питоне
Создание или объявление переменной в Питоне происходит в тот момент, когда вы присваиваете ей определенное значение. Это очень удобно. Заранее объявлять переменную не требуется.
# можно создать переменную, присвоив ей числовое значение
# кроме того, переменной можно задать строковое (текстовое) значение
y = ‘Я программирую на Питоне’
Я программирую на ПитонеТакже напомню, что в Питоне можно записать значения сразу в несколько переменных или присвоить одно и то же значение нескольким переменным.
# присваиваем разные значения сразу нескольким переменным
a , b , c = ‘Питон’ , ‘C++’ , ‘PHP’
print ( a , b , c )
Питон C++ PHP
# задаем одно и то же значение нескольким переменным
x = y = z = ‘То же самое значение’
print ( x , y , z )
То же самое значение То же самое значение То же самое значениеПомимо этого, список можно «распаковать» (unpack) в несколько переменных:
my_list = [ ‘помидоры’ , ‘огурцы’ , ‘картофель’ ]
a , b , c = my_list
print ( a , b , c )
помидоры огурцы картофельАвтоматическое определение типа данных
При создании и записи данных в переменную Питон попытается автоматически определить тип этих данных. Приведем несколько примеров:
x = 256 # в этом случае переменной x присваивается тип int (целочисленное значение)
y = 0.25 # y становится float (десятичной дробью)
z = ‘Просто текст’ # z становится str (строкой)Это очень важная и удобная особенность, которая выгодно отличает Питон от многих других языков программирования.
Как узнать тип переменной в Питоне
В случае, если вы не уверены в том, к какому типу данных относится переменная, можно воспользоваться функцией type().
# узнаем тип переменных из предыдущего примера
print ( type ( x ) , type ( y ) , type ( z ) )Присвоение и преобразование типа данных
Иногда может быть полезно принудительно присвоить или преобразовать тип данных уже созданной переменной. Начнем с присвоения типа данных:
x = str ( 25 ) # число 25 превратится в строку
y = int ( 25 ) # число 25 останется целочисленным значением
z = float ( 25 ) # число 25 превратится в десятичную дробь
print ( type ( x ) , type ( y ) , type ( z ) )Также тип данных можно изменить.
# преобразуем строку, похожую на целое число, в целое число
print ( type ( int ( ’25’ ) ) )
# или строку, похожую на дробь, в настоящую десятичную дробь
print ( type ( float ( ‘2.5’ ) ) )
# преобразуем дробь в целочисленное значение
# обратите внимание, что округления в большую сторону не происходит
print ( int ( 36.6 ) )
print ( type ( int ( 36.6 ) ) )
# конечно, и целое число, и дробь можно преобразовать в строку
print ( type ( str ( 25 ) ) )
print ( type ( str ( 36.6 ) ) )Возможно, вы спрашиваете себя зачем инженеру машинного обучения в таких деталях разбираться в типах переменных. Одним из наиболее очевидных применений является предварительная обработка данных, поступивших, скажем, в формате строки (str), хотя с точки зрения логики это должно быть целое число (int).
Именование переменных
Напомню, что имя переменной может включать только латинские буквы и цифры, а также символ подчеркивания. Одновременно оно не должно начинаться с цифры. Питон отличает заглавную от строчной буквы. Пробелы и кириллицу использовать нельзя.
Как я не устаю повторять, название переменных должно быть осознанным. Это упростит работу с длинным кодом.
Посмотрим на допустимые названия переменных: