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

Python позволяет вам возвращать из функции несколько значений. 

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

def miles_to_run(minimum_miles):
    week_1 = minimum_miles + 2
    week_2 = minimum_miles + 4
    week_3 = minimum_miles + 6
    return [week_1, week_2, week_3]

print(miles_to_run(2))
# result: [4, 6, 8]

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

Кортежи

Кортеж — упорядоченная, неизменяемая последовательность. То есть, значения внутри кортежа мы изменять не можем. 

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

nancy = ("Нэнси", 55, "Чикаго")

Пример функции, которая возвращает кортеж:

def person():
    return "Боб", 32, "Бостон"
 
print(person())
# result: ('Боб', 32, 'Бостон')

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

«Кортеж образуют запятые, а не круглые скобки» — так написано в документации. Но для создания пустых кортежей круглые скобки необходимы. Также это помогает избежать путаницы.

Пример функции, которая использует () для возврата кортежа: 

def person(name, age):
    return (name, age)
print(person("Генри", 5))
#result: ('Генри', 5)

Список

Список — упорядоченная, изменяемая последовательность. Элементы списка можно изменять. 

Список с городами: 

cities = ["Бостон", "Чикаго", "Джексонвилл"]

Или с оценками: 

test_scores = [55, 99, 100, 68, 85, 78]

Взгляните на функцию ниже. Она возвращает список, содержащий десять чисел. 

def ten_numbers():
    numbers = []
    for i in range(1, 11):
        numbers.append(i)
    return numbers
 
print(ten_numbers())
#result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Еще один пример. В этот раз мы передаем несколько аргументов в функцию.

def miles_ran(week_1, week_2, week_3, week_4):
    return [week_1, week_2, week_3, week_4]
 
monthly_mileage = miles_ran(25, 30, 28, 40)
print(monthly_mileage)
#result: [25, 30, 28, 40]

Спутать кортеж со списком довольно просто. Все-таки обе структуры хранят несколько значений. Важно запомнить ключевые отличия: 

  • Кортежи изменять нельзя. 
  • Списки изменять можно. 

Словари

Словарь — структура, в которой хранятся пары значений в виде «ключ-значение». Заключены эти значения в фигурные скобки {}. Каждому ключу соответствует свое значение.

Рассмотрим пример. В следующем словаре содержатся имена сотрудников. Имя сотрудника — ключ, его должность — значение. 

employees = {
    "Джек": "Инженер",
    "Мэри": "Менеджер",
    "Генри": "Писатель",
}

Пример функции, возвращающей словарь в виде «ключ-значение».

def city_country(city, country):
    location = {}
    location[city] = country
    return location
 
favorite_location = city_country("Бостон", "США")
print(favorite_location)
# result: {'Бостон': 'США'}

В примере выше «Бостон» — ключ, а «США» — значение. 

Мы проделали долгий путь… Подытожим — вы можете вернуть несколько значений из функции и существует несколько способов сделать это.