М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет113/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   109   110   111   112   113   114   115   116   ...   334
Байланысты:
Изучаем Python

УПРАЖНЕНИЯ
8.3. Футболка: 
напишите функцию 
make_shirt()
, которая получает размер футболки 
и текст, который должен быть напечатан на ней. Функция должна выводить сообщение 
с размером и текстом.


Возвращаемое значение
151
Вызовите функцию с использованием позиционных аргументов. Вызовите функцию во 
второй раз с использованием именованных аргументов.
8.4. Большие футболки:
измените функцию 
make_shirt()
, чтобы по умолчанию футболки 
имели размер L и на них выводился текст «I love Python». Создайте футболку с размером L 
и текстом по умолчанию, а также футболку любого размера с другим текстом.
8.5. Города:
напишите функцию 
describe_city()
, которая получает названия города 
и страны. Функция должна выводить простое сообщение (например, «Reykjavik is in 
Iceland»). Задайте параметру страны значение по умолчанию. Вызовите свою функцию 
для трех разных городов, по крайней мере один из которых не находится в стране по 
умолчанию.
Возвращаемое значение
Функция не обязана выводить результаты своей работы напрямую. Вместо этого 
она может обработать данные, а затем вернуть значение или набор сообщений. 
Значение, возвращаемое функцией, называется 
возвращаемым значением
. Команда 
return
передает значение из функции в точку программы, в которой эта функция 
была вызвана. Возвращаемые значения помогают переместить большую часть 
рутинной работы в вашей программе в функции, чтобы упростить основной код 
программы.
Возвращение простого значения
Рассмотрим функцию, которая получает имя и фамилию и возвращает аккуратно 
отформатированное полное имя:
formatted_name.py

def get_formatted_name(first_name, last_name):
"""Возвращает аккуратно отформатированное полное имя."""

full_name = f"{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


152
Глава 8 • Функции
Может показаться, что все эти хлопоты излишни — с таким же успехом можно 
было использовать команду:
print("Jimi Hendrix")
Но если представить, что вы пишете большую программу, в которой многочис-
ленные имена и фамилии должны храниться по отдельности, такие функции, как 
get_formatted_name()
, становятся чрезвычайно полезными. Вы храните имена 
отдельно от фамилий, а затем вызываете функцию везде, где потребуется вывести 
полное имя.
Необязательные аргументы
Иногда бывает удобно сделать аргумент необязательным, чтобы разработчик, ис-
пользующий функцию, мог передать дополнительную информацию только в том 
случае, если он этого захочет. Чтобы сделать аргумент необязательным, можно 
воспользоваться значением по умолчанию.
Допустим, вы захотели расширить функцию 
get_formatted_name()
, чтобы она 
также работала и со вторыми именами. Первая попытка могла бы выглядеть так:
def get_formatted_name(first_name, middle_name, last_name):
"""Возвращает аккуратно отформатированное полное имя."""
full_name = f"{first_name} {middle_name} {last_name}"
return full_name.title()
musician = get_formatted_name('john', 'lee', 'hooker')
print(musician)
Функция работает при получении имени, второго имени и фамилии. Она получает 
все три части имени, а затем строит из них строку. Функция добавляет пробелы там, 
где это уместно, и преобразует полное имя в формат с капитализацией:
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 = f"{first_name} {middle_name} {last_name}"

else:
full_name = f"{first_name} {last_name}"
return full_name.title()


Возвращаемое значение
153
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
и выводится.
Вызов этой функции с именем и фамилией достаточно тривиален. Но при ис-
пользовании второго имени придется проследить за тем, чтобы второе имя было 
последним из передаваемых аргументов. Это необходимо для правильного связы-
вания позиционных аргументов в строке 

.
Обновленная версия этой функции подойдет как для людей, у которых задается 
только имя и фамилия, так и для людей со вторым именем:
Jimi Hendrix
John Lee Hooker
Необязательные значения позволяют функциям работать в максимально широком 
спектре сценариев использования без усложнения вызовов.
Возвращение словаря
Функция может вернуть любое значение, которое вам потребуется, в том числе 
и более сложную структуру данных (например, список или словарь). Так, следующая 
функция получает части имени и возвращает словарь, представляющий человека:


Достарыңызбен бөлісу:
1   ...   109   110   111   112   113   114   115   116   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет