简单理解Python代码的重构

embedded/2024/12/23 1:21:51/
版本一:
实现存储用户的名字:
remember_me.py
python">#易择365
from pathlib import Path
import json
username = input("请输入你的名字:")
path = Path('username.json')
contents = json.dumps(username)
path.write_text(contents)
print(f"已经记录了你的名字是:{username}!")
向名字已被存储的用户发出问候:
greet_user.py
python">#易择365
from pathlib import Path
import json
path = Path('username.json')
contents = path.read_text()
username = json.loads(contents)
print(f"欢迎回来, {username}!")

版本二:合并两个模块

remember_me.py

python">#易择365
from pathlib import Path
import json
def greet_user():"""问候用户,并说出其名字"""path = Path('username.json')if path.exists():user = path.read_text()username = json.loads(user)print(f"欢迎回来, {username}!")else:username = input("请输入你的名字:")user = json.dumps(username)path.write_text(user)print(f"已经记录了你的名字:{username}!")

版本三:重构方法

抽取出获取用户名

remember_me.py

python">#易择365
from pathlib import Path
import json
def get_stored_username(path):if path.exists():user = path.read_text()username = json.loads(user)return usernameelse:return None
def greet_user():"""问候用户,并说出其名字"""path = Path('username.json')username = get_stored_username(path)if username:print(f"欢迎回来, {username}!")else:username = input("请输入你的名字:")user = json.dumps(username)path.write_text(user)print(f"已经记录了你的名字:{username}!")

继续抽取输入用户名:

python">#存储用户输入的名字:易择365
from pathlib import Path
import json
def get_stored_username(path):"""读取存储的用户名字"""if path.exists():con=path.read_text()u_name=json.loads(con)return u_nameelse:return None
def get_new_username(path):"""存储用户名字"""u_name=input("请输入你的名字:")con=json.dumps(u_name)path.write_text(con)return u_namedef greet_user():"""问候用户"""path=Path('username.json')u_name=get_stored_username(path)if u_name:print(f"欢迎回来:{u_name}")else:u_name=get_new_username(path)print(f"已经记录了你的名字:{u_name}")

版本四:存储用户更多的信息

python">#存储用户输入的名字:易择365
from pathlib import Path
import json
def get_stored_username(path):"""读取存储的用户名字"""if path.exists() and path.read_text():con=path.read_text()user=json.loads(con)return userelse:return None
def get_new_username(path):"""存储用户名字"""user={}user['u_name']=input("输入名字:")user['u_age']=input("输入年龄:")user['u_sex']=input("输入性别:")con=json.dumps(user)path.write_text(con)return userdef greet_user():"""问候用户"""path=Path('username.json')user=get_stored_username(path)if user:print(f"欢迎您:{user['u_name']}")else:user=get_new_username(path)print(f"已经记录了你的名字:{user['u_name']}")

版本五:当前用户是否是上次运行该程序的用户

python">#易择365
from pathlib import Path
import json
def get_stored_username(path):"""读取存储的用户名字"""if path.exists() and path.read_text():con=path.read_text()user=json.loads(con)return userelse:return None
def get_new_username(path):"""存储用户名字"""user={}user['u_name']=input("输入名字:")user['u_age']=input("输入年龄:")user['u_sex']=input("输入性别:")con=json.dumps(user)path.write_text(con)return userdef get_username_ask(user):req=input(f"{user['u_name']}是您的用户名吗?输入如:y/n")return reqdef greet_user():"""问候用户"""path=Path('username.json')user=get_stored_username(path)if user:if get_username_ask(user)=='y':print(f"欢迎您:{user['u_name']}")else:user=get_new_username(path)print(f"已经记录了你的名字:{user['u_name']}")else:user=get_new_username(path)print(f"已经记录了你的名字:{user['u_name']}")
每个函数都执行单一而清晰 的任务,要编写出清晰且易于维护和扩展的代码,这种划分必不可少。

http://www.ppmy.cn/embedded/126032.html

相关文章

【PostgreSQL】运维篇——定期备份与恢复策略

在数据库管理中,定期备份是确保数据安全性和可恢复性的关键措施。制定一个有效的备份计划可以帮助您在发生数据丢失、损坏或其他灾难性事件时快速恢复数据。 以下是制定定期备份计划的步骤,以及使用pg_dump和其他工具进行数据备份和恢复的详细介绍。 1…

HUAWEI_HCIA_实验指南_Lib1.4_配置通过Telnet登录系统

一、原理概述 Telnet(Telecommunication Network Protocol)起源于ARPANET,是最早的Internet应用之一。 Telnet 通常用在远程登录应用中,以便对本地或远端运行的网络设备进行配置、监控和维护。如网络中有多台设备需要配置和管理,用户无需为每一台设备…

国外电商系统开发-运维系统操作脚本

查看脚本内容,只需要点击即可: 执行脚本,请点击 点击了下一步后,可以输出脚本参数,当然你可以可以不输入,直接下一步就行: 现在,点击【下一步】执行开始出初始化脚本: …

Java每日面试题(java基础)(day17)

目录 JDK/JRE/JVM三者的关系JDK常用的包 和 equals 的区别是什么?Java 中的几种基本数据类型了解么?什么是自动拆装箱?final 关键字中有什么作用?接口和抽象类有什么区别?String, StringBuffer 和 StringBuilder区别St…

MATLAB工具库:数据统计分析工具MvCAT、MhAST等

MATLAB工具库:数据统计分析工具MvCAT、MhAST等 工具1:Multivariate Copula Analysis Toolbox (MvCAT)MATLAB中运行 工具2:Multi-hazard Scenario Analysis Toolbox (MhAST) 参考 The University of California-软件库-Software 工具1&#xf…

RK3568笔记六十四:SG90驱动测试

若该文为原创文章,转载请注明原文出处。 前面有测试过PWM驱动,现在使用两种方式来产生PWM驱动SG90,实现舵机旋转任意角度 方法一:使用硬件PWM 方法二:使用高精度定时器,GPIO模拟PWM. 一、PWM子系统框架 二、SG90控制方法 舵机的控制需要MCU产生一个周期为20ms的脉冲信号…

JavaScript的生成器与组合学习

基本介绍 生成器是 JavaScript 中的一种特殊函数,能够在执行过程中暂停,并且在需要的时候恢复执行。这与普通函数的执行方式不同,普通函数一旦开始执行,必须执行完所有语句后才会返回,而生成器可以在执行过程中多次暂…

网络攻击原理与攻击方法

目录 网络攻击原理 网络攻击方法 网络攻击原理 网络攻击由攻击者发起,使用一定的攻击工具,通过某种访问方式,达到一定的攻击效果,实现某种攻击意图。其基本原理包括: 利用漏洞:网络攻击往往依赖于目标系…