Книга «Изучаем Python»



Pdf көрінісі
бет89/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   85   86   87   88   89   90   91   92   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

УПРАЖНЕНИЯ
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
Необязательные значения позволяют функциям работать в максимально широком 
спектре сценариев использования без усложнения вызовов.
Возвращение словаря
Функция может вернуть любое значение, нужное вам, в том числе и более сложную 
структуру данных (например, список или словарь). Так, следующая функция полу-
чает части имени и возвращает словарь, представляющий человека:


Достарыңызбен бөлісу:
1   ...   85   86   87   88   89   90   91   92   ...   266




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

    Басты бет