python之代码重构
在撸码过程中,总有很多代码需要重构,码一个问候用户的小例子,加深对代码重构的印象。
原始代码:
1 import json
2
3 filename = 'username.json' #定义文件名
4
5 try:
6 with open(filename) as file_object:
7 username = json.load(file_object) #加载存储的用户名,如果有的话
8
9 except FileNotFoundError:
10 username = input("what is your name: ")
11 with open(filename,'w') as file_object: #以写入的方式打开文件filename
12 json.dump(username,file_object) #将username写入到文件对象中
13 print("We will remember you when you back " +username + "!") #打印问候语
14
15 else:
16 print("Welcome back, " + username + "!") #打印问候语
代码重构1,将代码全部封装到一个函数里面:
1 import json
2
3 '''定义函数,用于代码封装'''
4 def greet_user():
5 filename = 'username.json'
6 try:
7 with open(filename) as file_object:
8 username = json.load(file_object)
9
10 except FileNotFoundError:
11 username = input("What is your name: ")
12 with open(filename,'w') as file_object:
13 json.dump(username,file_object)
14 print("We will remember you when you back, " + username + "!")
15
16 else:
17 print("Welcome back, " + username + "!")
18
19 greet_user() #调用函数问候
代码重构2,将代码重构1的函数进一步拆分,让函数greet_user()不执行那么多任务,我们将获取存储的用户名的代码写到另一个get_stored_user()函数中。
1 import json
2
3
4 def get_stored_user():
5 filename = 'username.json'
6 try:
7 with open(filename) as file_object:
8 username = json.load(file_object)
9
10 except FileNotFoundError:
11 return None
12
13 else:
14 return username
15
16
17 def greet_user():
18 username = get_stored_user()
19 if username:
20 print("Welcome back " + username + "!")
21 else:
22 username = input("What is your name: ")
23 filename = 'username.json'
24 with open(filename,'w') as file_object:
25 json.dump(username,file_object)
26 print("We will remember you when you back, " + username + "!")
27
28 greet_user() #调用函数问候
代码重构3,由于最终的目的是问候用户,我们可以将重构2里的代码进一步拆分,将没有用户名的时候提示输入用户名的代码存储在另外一个函数中。
1 import json
2
3 def get_stored_user():
4 '''定义函数以获取存储了的用户名'''
5 filename = 'username.json'
6 try:
7 with open(filename) as file_object:
8 username = json.load(file_object)
9 except FileNotFoundError:
10 return None
11 else:
12 return username #返回用户名
13
14 def get_new_user():
15 '''定义函数以获取用户输入'''
16 username = input("What is your name: ")
17 filename = 'username.json'
18 with open(filename,'w') as file_object:
19 json.dump(username,file_object)
20
21 return username #返回用户名
22
23 def greet_user():
24 '''定义函数问候用户'''
25 username = get_stored_user()
26 if username:
27 print("Welcome back, " + username + "!")
28 else:
29 username = get_new_user()
30 print("We will remember you when you back, " + username + "!")
31
32 greet_user() #调用函数,打印问候语
代码重构的意义在于,简化同一个代码块的任务量,让代码更容易读懂。
python之代码重构的更多相关文章
- 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较
重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...
- C++代码重构——从C global到C++ template
在学数据结构的时候,我常有这样目标--写出能够最大程度复用的代码(算法正确,封装优秀).我常想--如何能在短时间内达成"算法正确,封装优秀"这样的目标.经过一段时间的摸索,我的结论 ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十二) 代码重构使用反射工厂解耦(一)缓存切换
前言 上一篇中,我们用了反射工厂来解除BLL和UI层耦合的问题.当然那是最简单的解决方法,再复杂一点的程序可能思路相同,但是在编程细节中需要考虑的就更多了,比如今天我在重构过程中遇到的问题.也是接下来 ...
- CSS代码重构与优化之路
作者:@狼狼的蓝胖子 网址:http://www.cnblogs.com/lrzw32/p/5100745.html 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多, ...
- NET代码重构
记一次.NET代码重构 好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使 ...
- 代码重构 & 常用设计模式
代码重构 重构目的 相同的代码最好只出现一次 主次方法 主方法 只包含实现完整逻辑的子方法 思维清楚,便于阅读 次方法 实现具体逻辑功能 测试通过后,后续几乎不用维护 重构的步骤 1 新建一个方法 ...
- Python一行代码
1:Python一行代码画出爱心 print]+(y*-)**-(x**(y*<= ,)]),-,-)]) 2:终端路径切换到某文件夹下,键入: python -m SimpleHTTPServ ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦
前言 自从此博客发表以及代码开源以来,得到了许多人的关注.也没许多吧,反正在我意料之外的.包括几位大牛帮我做订阅号推广,真的很感谢他们.另外,还有几个高手给我提了一些架构上的问题.其实本身这个项目是没 ...
- python爬虫代码
原创python爬虫代码 主要用到urllib2.BeautifulSoup模块 #encoding=utf-8 import re import requests import urllib2 im ...
随机推荐
- php 上传图片,无刷新上传,支持多图上传,远程图片上传
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html ...
- 第四章:动态规划I
4.1背包问题 动态规划的核心:如何构造一个高效的备忘录,提高整个问题求解的效率. 4.2最大子数组问题II
- 灵彤彤女版PUA机构火了!“我花了8888报名学撩汉,却被导师骗去卖身。
最近,几张女PUA机构的导师和课程海报在社交网络广泛刷屏. 而社长觉得自己可以去潜心研究一下,为什么有女PUA机构的这种课程呢? 爱情的确是一门玄学. 精通此技能的女孩桃花不断,前任和现任无缝切换 ...
- 【AcWing 99】激光炸弹——二维前缀和
(题面来自AcWing) 一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标. 现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi. 激光炸弹的 ...
- 分享:经常说你精通C语言,看看这十道题你会不会解!
今天给大家分享我们在日常工作中可能遇到的疑问,不看答案,你是否有把握都能答对?让我们来试试吧~ 一.会输出"hello-std-out"? 参考答案: stdout和stder ...
- 网络篇:朋友面试之TCP/IP,回去等通知吧
前言 最近和一同学聊天,他想换工作,然后去面了一家大厂.当时,他在简历上写着精通TCP/IP,本着对TCP协议稍有了解,面试官也不会深问的想法,就写了精通二字.没想到,大意了 关注公众号,一起交流,微 ...
- 如何测试一个APP
1.是否支持各种手机系统 2.是否会因为分辨率而出错 3.不同机型能否安装 4.老旧机型 能否通用 5.广告时长 6.测试能否登陆注册 7.卸载时是否会发生意外 8.安装时会不会误认为带病毒 9.用户 ...
- windowsAPI函数操作注册表实现软件开机自启
注册表的结构 注册表是一个数据库,它的结构同逻辑磁盘类似.注册表包含键(Key),它类似磁盘中的目录,注册表还包含键值(Value),它类似磁盘中的文件.一个键可以包含多个子健和键值,其中键值用于存储 ...
- Docker 指南
一.docker 介绍 1.1 引言 环境不一致 "我本地运行没问题啊?!" 多用户相互影响 "哪个哥们又写死循环了,怎么这么卡?!" 运维成本高 " ...
- SQL优化之SQL 进阶技巧(下)
上文( SQL优化之SQL 进阶技巧(上) )我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [r ...