УПРАЖНЕНИЯ
8-3 . Футболка: напишите функцию make_shirt(), которая получает размер футболки и текст,
который должен быть напечатан на ней . Функция должна выводить сообщение с размером
и текстом . Вызовите функцию с использованием позиционных аргументов . Вызовите функ-
цию во второй раз с использованием именованных аргументов .
8-4 . Большие футболки: измените функцию make_shirt(), чтобы футболки по умолчанию
имели размер L, и на них выводился текст «I love Python .» . Создайте футболку с размером
L и текстом по умолчанию, а также футболку любого размера с другим текстом .
8-5 . Города: напишите функцию describe_city(), которая получает названия города и стра-
ны . Функция должна выводить простое сообщение (например, «Reykjavik is in Iceland») . За-
дайте параметру страны значение по умолчанию . Вызовите свою функцию для трех разных
городов, по крайней мере один из которых не находится в стране по умолчанию .
Возвращаемое значение
Функция не обязана выводить результаты своей работы. Вместо этого она может
обработать данные, а затем вернуть значение или набор сообщений. Значение,
возвращаемое функцией, называется возвращаемым значением. Команда
return
передает значение из функции в строку, в которой эта функция была вызвана.
Возвращаемые значения помогают переместить бульшую часть рутинной работы
в вашей программе в функции, чтобы упростить основной код программы.
Возвращаемое значение 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
Необязательные значения позволяют функциям работать в максимально широком
спектре сценариев использования без усложнения вызовов.
Возвращение словаря
Функция может вернуть любое значение, нужное вам, в том числе и более сложную
структуру данных (например, список или словарь). Так, следующая функция полу-
чает части имени и возвращает словарь, представляющий человека:
Достарыңызбен бөлісу: |