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



Pdf көрінісі
бет83/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   79   80   81   82   83   84   85   86   ...   238
Байланысты:
2 5343781172763690906

УПРАЖНЕНИЯ

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   ...   79   80   81   82   83   84   85   86   ...   238




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

    Басты бет