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



Pdf көрінісі
бет127/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   123   124   125   126   127   128   129   130   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 10 • Файлы и исключения
Переработаем функцию 
greet_user()
, чтобы она не решала столько разных задач. 
Начнем с перемещения кода загрузки хранимого имени пользователя в отдельную 
функцию:
import json
def get_stored_username():
 
"""Получает хранимое имя пользователя, если оно существует."""
filename = 'username.json'
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
 
return None
else:
return username
def greet_user():
"""Приветствует пользователя по имени."""
username = get_stored_username()
 
if username:
print("Welcome back, " + username + "!")
else:
username = input("What is your name? ")
filename = 'username.json'
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
print("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_obj:
json.dump(username, f_obj)
return username


Итоги
209
def greet_user():
"""Приветствует пользователя по имени."""
username = get_stored_username()
if username:
print("Welcome back, " + username + "!")
else:
username = get_new_username()
print("We'll remember you when you come back, " + username + "!")
greet_user()
Каждая функция в окончательной версии 
remember_me .py
имеет четкое, конкретное 
предназначение. Мы вызываем 
greet_user()
, и эта функция выводит нужное при-
ветствие: либо для уже знакомого, либо для нового пользователя. Для этого функ-
ция вызывает функцию 
get_stored_username()
, которая отвечает только за чтение 
хранимого имени пользователя (если оно есть). Наконец, функция 
greet_user()
при необходимости вызывает функцию 
get_new_username()
, которая отвечает толь-
ко за получение нового имени пользователя и его сохранение. Такое «разделение 
обязанностей» является важнейшим аспектом написания чистого кода, простого 
в сопровождении и расширении.


Достарыңызбен бөлісу:
1   ...   123   124   125   126   127   128   129   130   ...   266




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

    Басты бет