person.py
def build_person(first_name, last_name):
"""Возвращает словарь с информацией о человеке."""
person = {'first': first_name, 'last': last_name}
return person
musician = build_person('jimi', 'hendrix')
print(musician)
Функция
build_person()
получает имя и фамилию и сохраняет полученные зна-
чения в словаре в точке . Значение
first_name
сохраняется с ключом
'first'
,
а значение
last_name
— с ключом
'last'
. Весь словарь с описанием человека
возвращается в точке . Возвращаемое значение выводится в точке с двумя
исходными фрагментами текстовой информации, теперь хранящимися в словаре:
{'first': 'jimi', 'last': 'hendrix'}
Функция получает простую текстовую информацию и помещает ее в более удоб-
ную структуру данных, которая позволяет работать с информацией (помимо про-
стого вывода). Строки
'jimi'
и
'hendrix'
теперь помечены как имя и фамилия.
Функцию можно легко расширить так, чтобы она принимала дополнительные
значения: — второе имя, возраст, профессию или любую другую информацию о че-
ловеке, которую вы хотите сохранить. Например, следующее изменение позволяет
также сохранить возраст человека:
def build_person(first_name, last_name, age=''):
"""Возвращает словарь с информацией о человеке."""
person = {'first': first_name, 'last': last_name}
if age:
person['age'] = age
return person
musician = build_person('jimi', 'hendrix', age=27)
print(musician)
В определение функции добавляется новый необязательный параметр
age
, кото-
рому назначается пустое значение по умолчанию. Если вызов функции включает
значение этого параметра, то значение сохраняется в словаре. Функция всегда
сохраняет имя, но ее также можно модифицировать, чтобы она сохраняла любую
необходимую информацию о человеке.
146 Глава 8 • Функции
Использование функции в цикле while
Функции могут использоваться со всеми структурами Python, уже известными
вам. Например, используем функцию
get_formatted_name()
в цикле
while
, чтобы
поприветствовать пользователей более официально. Первая версия программы,
приветствующей пользователей по имени и фамилии, может выглядеть так:
greeter.py
def get_formatted_name(first_name, last_name):
"""Возвращает аккуратно отформатированное полное имя."""
full_name = first_name + ' ' + last_name
return full_name.title()
# Бесконечный цикл!
while True:
print("\nPlease tell me your name:")
f_name = input("First name: ")
l_name = input("Last name: ")
formatted_name = get_formatted_name(f_name, l_name)
print("\nHello, " + formatted_name + "!")
В этом примере используется простая версия
get_formatted_name()
, без вторых
имен. В цикле
while
имя и фамилия пользователя запрашиваются по отдель-
ности.
Но у этого цикла
while
есть один недостаток: в нем не определено условие завер-
шения. Где следует разместить условие завершения при запросе серии данных?
Пользователю нужно предоставить возможность выйти из цикла как можно рань-
ше, так что в приглашении должен содержаться способ завершения. Команда
break
позволяет немедленно прервать цикл при запросе любого из компонентов:
def get_formatted_name(first_name, last_name):
"""Возвращает аккуратно отформатированное полное имя."""
full_name = first_name + ' ' + last_name
return full_name.title()
while True:
print("\nPlease tell me your name:")
print("(enter 'q' at any time to quit)")
f_name = input("First name: ")
if f_name == 'q':
break
l_name = input("Last name: ")
if l_name == 'q':
break
formatted_name = get_formatted_name(f_name, l_name)
print("\nHello, " + formatted_name + "!")
В программу добавляется сообщение, которое объясняет пользователю, как за-
вершить ввод данных, и при вводе признака завершения в любом из приглашений
Передача списка 147
цикл прерывается. Теперь программа будет приветствовать пользователя до тех
пор, пока вместо имени или фамилии не будет введен символ
'q'
:
Please tell me your name:
(enter 'q' at any time to quit)
First name: eric
Last name: matthes
Hello, Eric Matthes!
Please tell me your name:
(enter 'q' at any time to quit)
First name: q
Достарыңызбен бөлісу: |