Читаем Изучаем Python полностью

В точке (1) программа запрашивает имя пользователя для сохранения. Затем вызывается функция json.dump(), которой передается имя пользователя и объект файла; функция сохраняет имя пользователя в файле (2). Далее выводится сообщение о том, что имя пользователя было сохранено (3):

What is your name? Eric

We'll remember you when you come back, Eric!

А теперь напишем другую программу, которая приветствует пользователя по ранее сохраненному имени:

greet_user.py

import json

filename = 'username.json'

with open(filename) as f_obj:

(1) . .username = json.load(f_obj)

(2) . .print("Welcome back, " + username + "!")

В точке (1) вызов json.load() читает информацию из файла username.json в переменную username. После того как данные будут успешно прочитаны, мы можем поприветствовать пользователя по имени (2):

Welcome back, Eric!

Теперь эти две программы необходимо объединить в один файл. Когда пользователь запускает remember_me.py, программа должна взять имя пользователя из памяти, если это возможно; соответственно, программа начинается с блока try, который пытается прочитать имя пользователя. Если файл username.json не существует, блок except запросит имя пользователя и сохранит его в username.json на будущее:

remember_me.py

import json

# Программа загружает имя пользователя, если оно было сохранено ранее.

# В противном случае она запрашивает имя пользователя и сохраняет его.

filename = 'username.json'

try:

(1) . .with open(filename) as f_obj:

(2) . . . .username = json.load(f_obj)

(3)except FileNotFoundError:

(4) . .username = input("What is your name? ")

(5) . .with open(filename, 'w') as f_obj:

. . . .json.dump(username, f_obj)

. . . .print("We'll remember you when you come back, " + username + "!")

else:

. .print("Welcome back, " + username + "!")

Никакого нового кода здесь нет; просто блоки кода из двух предыдущих примеров были объединены в один файл. В точке (1) программа пытается открыть файл username.json. Если файл существует, программа читает имя пользователя в память (2) и выводит сообщение, приветствующее пользователя, в блоке else. Если программа запускается впервые, то файл username.json не существует, и происходит исключение FileNotFoundError (3). Python переходит к блоку except, в котором пользователю предлагается ввести имя (4). Затем программа вызывает json.dump() для сохранения имени пользователя и выводит приветствие (5).

Какой бы блок ни выполнялся, результатом является имя пользователя и соответствующее сообщение. При первом запуске программы результат выглядит так:

What is your name? Eric

We'll remember you when you come back, Eric!

Если же программа уже была выполнена хотя бы один раз, результат будет таким:

Welcome back, Eric!

<p>Рефакторинг</p>

Часто возникает типичная ситуация: код работает, но вы понимаете, что его структуру можно усовершенствовать, разбив его на функции, каждая из которых решает свою конкретную задачу. Этот процесс называется рефакторингом (или переработкой). Рефакторинг делает ваш код более чистым, понятным и простым в расширении.

В процессе рефакторинга remember_me.py мы можем переместить основную часть логики в одну или несколько функций. Основной задачей remember_me.py является вывод приветствия для пользователя, поэтому весь существующий код будет перемещен в функцию greet_user():

remember_me.py

import json

def greet_user():

(1) . ."""Приветствует пользователя по имени."""

filename = 'username.json'

try:

with open(filename) as f_obj:

username = json.load(f_obj)

except FileNotFoundError:

username = input("What is your name? ")

with open(filename, 'w') as f_obj:

json.dump(username, f_obj)

print("We'll remember you when you come back, " + username + "!")

else:

print("Welcome back, " + username + "!")

greet_user()

С переходом на функцию комментарии дополняются строкой документации, которая описывает работу кода в текущей версии (1) . Код становится немного чище, но функция greet_user() не только приветствует пользователя — она также загружает хранимое имя пользователя, если оно существует, и запрашивает новое имя, если оно не было сохранено ранее.

Переработаем функцию greet_user(), чтобы она не решала столько разных задач. Начнем с перемещения кода загрузки хранимого имени пользователя в отдельную функцию:

import json

def get_stored_username():

(1) . ."""Получает хранимое имя пользователя, если оно существует."""

filename = 'username.json'

try:

with open(filename) as f_obj:

username = json.load(f_obj)

except FileNotFoundError:

(2) . . . .return None

. .else:

. . . .return username

def greet_user():

"""Приветствует пользователя по имени."""

. .username = get_stored_username()

(3) . .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()

Перейти на страницу:

Все книги серии Библиотека программиста

Программист-фанатик
Программист-фанатик

В этой книге вы не найдете описания конкретных технологий, алгоритмов и языков программирования — ценность ее не в этом. Она представляет собой сборник практических советов и рекомендаций, касающихся ситуаций, с которыми порой сталкивается любой разработчик: отсутствие мотивации, выбор приоритетов, психология программирования, отношения с руководством и коллегами и многие другие. Подобные знания обычно приходят лишь в результате многолетнего опыта реальной работы. По большому счету перед вами — ярко и увлекательно написанное руководство, которое поможет быстро сделать карьеру в индустрии разработки ПО любому, кто поставил себе такую цель. Конечно, опытные программисты могут найти некоторые идеи автора достаточно очевидными, но и для таких найдутся темы, которые позволят пересмотреть устоявшиеся взгляды и выйти на новый уровень мастерства. Для тех же, кто только в самом начале своего пути как разработчика, чтение данной книги, несомненно, откроет широчайшие перспективы. Издательство выражает благодарность Шувалову А. В. и Курышеву А. И. за помощь в работе над книгой.

Чед Фаулер

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных