Возвращаемое значение
143
Возвращение простого значения
Рассмотрим функцию, которая получает имя и фамилию и возвращает аккуратно
отформатированное полное имя:
formatted_name.py
def get_formatted_name(first_name, last_name):
"""Возвращает аккуратно отформатированное полное имя."""
full_name = first_name + ' ' + last_name
return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
print(musician)
Определение
get_formatted_name()
получает в параметрах имя и фамилию
.
Функция объединяет эти два имени, добавляет между ними пробел и сохраняет
результат в
full_name
. Значение
full_name
преобразуется в формат с начальной
буквой
верхнего регистра, а затем возвращается в точку вызова
.
Вызывая функцию, которая возвращает значение, необходимо предоставить пере-
менную, в которой должно храниться возвращаемое значение. В данном случае
возвращаемое значение сохраняется в переменной
musician
. Результат содержит
аккуратно отформатированное полное имя, построенное из имени и фамилии:
Jimi Hendrix
Может показаться, что все эти хлопоты излишни — с таким же успехом можно
было использовать команду:
print("Jimi Hendrix")
Но если представить, что вы пишете большую программу, в которой многочис-
ленные имена и фамилии должны храниться по отдельности, такие функции, как
get_formatted_name()
, становятся чрезвычайно полезными. Вы храните имена
отдельно от фамилий, а затем вызываете функцию везде, где потребуется вывести
полное имя.
Необязательные
аргументы
Иногда бывает удобно сделать аргумент необязательным, чтобы разработчик, ис-
пользующий функцию, мог передать дополнительную информацию только в том
случае, если он этого захочет. Чтобы сделать аргумент необязательным, можно
воспользоваться значением по умолчанию. Допустим, вы захотели расширить
функцию
get_formatted_name()
, чтобы она также работала и со вторыми именами.
Первая попытка могла бы выглядеть так:
def get_formatted_name(first_name, middle_name, last_name):
"""Возвращает аккуратно отформатированное полное имя."""
full_name = first_name + ' ' + middle_name + ' ' + last_name
return full_name.title()
musician = get_formatted_name('john', 'lee', 'hooker')
print(musician)
144
Глава 8 • Функции
Функция работает при получении имени, второго имени и фамилии. Она получает
все три части имени, а затем строит из них строку. Функция добавляет пробелы
там, где это уместно, и преобразует полное имя в формат с капитализацией:
John Lee Hooker
Однако вторые имена нужны не всегда, а в такой записи функция не будет работать,
если при вызове ей передаются только имя и фамилия. Чтобы средний аргумент
был необязательным, можно присвоить аргументу
middle_name
пустое значение
по умолчанию; этот аргумент игнорируется, если пользователь не передал для него
значение. Чтобы функция
get_formatted_name()
работала без второго имени, сле-
дует назначить для параметра
middle_name
пустую строку значением по умолчанию
и переместить его в конец списка параметров:
def get_formatted_name(first_name, last_name, middle_name=''):
"""Возвращает аккуратно отформатированное полное имя."""
if middle_name:
full_name = first_name + ' ' + middle_name + ' ' + last_
name
else:
full_name = first_name + ' ' + last_name
return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
print(musician)
musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)
В этом примере имя строится из трех возможных частей. Поскольку имя и фамилия
указываются всегда, эти параметры стоят в начале списка в определении функции.
Второе имя не обязательно, поэтому оно находится на последнем месте в опреде-
лении, а его значением по умолчанию
является пустая строка
.
В теле функции мы сначала проверяем, было ли задано второе имя. Python ин-
терпретирует непустые строки как истинное значение, и, если при вызове задан
аргумент второго имени,
middle_name
дает результат
True
. Если второе имя
указано, то из имени, второго имени и фамилии строится полное имя. Затем имя
преобразуется с капитализацией символов и возвращается в строку вызова функ-
ции, где оно сохраняется в переменной
musician
и выводится. Если второе имя не
указано, то пустая строка не проходит проверку
if
и выполняет блок
else
. В этом
случае полное имя строится только из имени и фамилии, и отформатированное
имя возвращается в строку вызова, где оно сохраняется в переменной
musician
и выводится.
Вызов этой функции с именем и фамилией достаточно тривиален. Но при ис-
пользовании второго имени придется проследить за тем, чтобы второе имя было
последним из передаваемых аргументов. Это необходимо для правильного связы-
вания позиционных аргументов в строке
.
Обновленная версия этой функции подойдет как для людей, у которых задается
только имя и фамилия, так и для людей со вторым именем:
Возвращаемое значение
145
Jimi Hendrix
John Lee Hooker
Необязательные значения позволяют функциям работать в максимально широком
спектре сценариев использования без усложнения вызовов.
Возвращение
словаря
Функция может вернуть любое значение, нужное вам, в том числе и более сложную
структуру данных (например, список или словарь). Так, следующая функция полу-
чает части имени и возвращает словарь, представляющий человека:
Достарыңызбен бөлісу: