220
Глава 10 •
Файлы и исключения
❷
return None
else:
return username
def greet_user():
"""Приветствует пользователя по имени."""
username = get_stored_username()
❸
if username:
print(f"Welcome back, {username}!")
else:
username = input("What is your name? ")
filename = 'username.json'
with open(filename, 'w') as f:
json.dump(username, f)
print(f"We'll remember you when you come back, {username}!")
greet_user()
Новая функция
get_stored_username()
имеет четкое предназначение, изложенное
в строке документации
. Эта функция читает и возвращает сохраненное имя
пользователя, если его удается найти. Если файл
username .json
не существует, то
функция возвращает
None
. И это правильно: функция должна возвращать либо
ожидаемое значение, либо
None
. Это позволяет провести простую проверку воз-
вращаемого значения функции. В точке
программа выводит приветствие для
пользователя, если попытка получения имени пользователя была успешной; в про-
тивном случае программа запрашивает новое имя пользователя.
Из функции
greet_user()
стоит вынести еще один блок кода. Если имя пользова-
теля не существует, то код запроса нового имени должен размещаться в функции,
специализирующейся на решении этой задачи:
import json
def get_stored_username():
"""Получает хранимое имя пользователя, если оно существует."""
...
def get_new_username():
"""Запрашивает новое имя пользователя."""
username = input("What is your name? ")
filename = 'username.json'
with open(filename, 'w') as f:
json.dump(username, f)
return username
def greet_user():
"""Приветствует пользователя по имени."""
username = get_stored_username()
if username:
print(f"Welcome back, {username}!")
else:
username = get_new_username()
print(f"We'll remember you when you come back, {username}!")
greet_user()
Итоги
221
Каждая функция в окончательной версии
remember_me .py
имеет четкое, конкретное
предназначение. Мы вызываем
greet_user()
, и эта функция выводит нужное при-
ветствие: либо для уже знакомого, либо для нового пользователя. Для этого функ-
ция вызывает функцию
get_stored_username()
, которая отвечает только за чтение
хранимого имени пользователя (если оно есть). Наконец, функция
greet_user()
при необходимости вызывает функцию
get_new_username()
, которая отвечает толь-
ко за получение нового имени пользователя и его сохранение. Такое «разделение
обязанностей» является важнейшим аспектом написания чистого кода, простого
в сопровождении и расширении.
Достарыңызбен бөлісу: