第五次重构我们引入了数据库的设计,用户信息要从数据库中读取,问候语库存储在数据库中,并支持添加与更新。数据库的引入使自动化测试变得困难了,因为数据状态总是变化着的,而这种变化使得测试过程不能复现,这是我们不愿看到的。因此,我们在设计时将业务与数据库访问分离,形成了UserDao与GreetingRuleDao。此时,我们的设计应当遵从“依赖反转”原则,即将UserDao与GreetingRuleDao设计成接口,并编写它们的实现UserDaoImpl与Gr
系统 2019-08-29 21:59:03 1832
3.可变更性前面我提到了,软件的变更性是所有软件理论的核心,那么什么是软件的可变更性呢?按照现在的软件理论,客户对软件的需求时时刻刻在发生着变化。当软件设计好以后,为应对客户需求的变更而进行的代码修改,其所需要付出的代价,就是软件设计的可变更性。由于软件合理地设计,修改所付出的代价越小,则软件的可变更性越好,即代码设计的质量越高。一种非常理想的状态是,无论客户需求怎样变化,软件只需进行适当地修改就能够适应。但这之所以称之为理想状态,因为客户需求变化是有大有
系统 2019-08-29 21:58:57 1832
filter被称为高阶函数是有道理的。filter(self,/,*args,**kwargs)Docstring:filter(functionorNone,iterable)-->filterobjectReturnaniteratoryieldingthoseitemsofiterableforwhichfunction(item)istrue.IffunctionisNone,returntheitemsthataretrue.从Doc的简单描述可
系统 2019-09-27 17:56:08 1831
一:背景CentOS7里内置了一些应用,比如python2。现在需要在系统中安装python3。二:实验环境CentOS7系统中一个普通用户(root也无所谓,如果你愿意的话三:实验步骤准备工作(1)更新yum源。yum是基于RedHat的Linux系统中常用的包管理工具,可以使用yum安装、更新、移除软件安装包。使用sudoyum-yupdate,-y的主要作用就是省略确认步骤,详情见manyum。(2)安装yum-utils。yum-utils是拓展y
系统 2019-09-27 17:56:06 1831
三种方法:①直接使用dict②使用defaultdict③使用Counterps:`int()`函数默认返回0①dicttext="I'mahandsomeboy!"frequency={}forwordintext.split():ifwordnotinfrequency:frequency[word]=1else:frequency[word]+=1②defaultdictimportcollectionsfrequency=collections.d
系统 2019-09-27 17:54:44 1831
目录四、Python基础(1)四、Python基础(1)1.什么是变量?一种变化的量,量是记录世界上的状态,变指得是这些状态是会变化的。2.为什么有变量?因为计算机程序的运行就是一系列状态的变化。3.定义变量在Python中定义变量:name='magua'age=24gender='man'height=168weight=2504.变量的组成三部分:1.变量名:变量名用来引用变量值,但凡需要用变量值,都需要通过变量名。2.赋值符号:赋值3.变量值:存放
系统 2019-09-27 17:54:30 1831
前言一年一度的虐狗节终于过去了,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的。程序员在晒什么,程序员在加班。但是礼物还是少不了的,送什么好?作为程序员,我准备了一份特别的礼物,用以往发的微博数据打造一颗“爱心”,我想她一定会感动得哭了吧。哈哈准备工作有了想法之后就开始行动了,自然最先想到的就是用Python了,大体思路就是把微博数据爬下来,数据经过清洗加工后再进行分词处理,处理后的数据交给词云工具,配合科学计算工具和绘图工具制作成图像出来,涉及到的工具包有
系统 2019-09-27 17:53:34 1831
Dash简介Dash是一个用于构建Web应用程序的Python数据可视化库。它基于PythonWeb框架Flask以及Javascript绘图库Plotly.js和用于构建用户界面的Javascript库React.js,所以它非常适合用于构建后端基于Flask,前端数据可视化的Web网页。因为Dash应用程序可以在Web浏览器中显示,所以可以将这些Dash应用程序部署到服务器,通过URL共享。Dash应用程序由两部分组成,第一部分是布局(Layout),
系统 2019-09-27 17:52:31 1831
**装饰器**1.装饰器的概念装饰器的本质就是一个函数,它的作用是为其他函数添加一个新的功能,但是不改变原函数的源代码和调用方式。装饰器的两大原则:不修改被修饰函数的源代码不修改被修饰函数的调用方式2.装饰器的知识储备(或者我们可以理解成,一个装饰器是由什么组成)装饰器=高阶函数+函数嵌套+闭包3.装饰器的实现首先我们定义一个累加求和的函数importtimedefcal():res=0foriinrange(100):res+=itime.sleep(1
系统 2019-09-27 17:50:53 1831
Python的MRO即MethodResolutionOrder(方法解析顺序),也就是在Python中的类的继承顺序是怎样的。在Python2.3之前,MRO的实现是基于DFS的,而在Python2.3以后MRO的实现是基于C3算法(我这里两种算法的具体实现都不详述)。C3算法最早被提出是用于Lisp的,应用在Python中是为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题。本地优先级:指声明时父类的顺序,比如C(A,B),如果访问C类对
系统 2019-09-27 17:50:47 1831