python
记录了在学习python的道路上学到的东西
Jonny Jiang-zh
do what you want to do
展开
-
python设计模式之适配器模式
python设计模式之适配器模式结构型设计模式一个系统中不同实体(比如,类和对象)之间的关系,关注的是提供一种简单的对象组合方式来创造功能。适配器模式( Adapter pattern)是一种结构型设计模式,帮助我们实现两个不兼容接口之间的容。首先,解释一下不兼容接口的真正含义。如果我们希望把一个老组件用于一个新系统中,或者把一个新组件用于一个老系统中,不对代码进行任何修改两者就能够通信的情况很少见。但又并非总是能修改代码,或因为我们无法访问这些代码(例如,组件以外部库的方式提供),或因为修改代码本身就原创 2020-07-02 01:14:47 · 164 阅读 · 0 评论 -
python设计模式之修饰器模式
python设计模式之修饰器模式无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法。 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) 使用组合 使用继承设计模式为我们提供第四种可选方法,以支持动态地(运行时)扩展一个对象的功能,这种方法就是修饰器。 修饰器( Decorator)模式能够以透明的方式(不会影响其他对象)动态地将功能添加到一个对象中。在许多编程语言中,使用子类化(继承)来实现修饰器模式。在Python中,我们可以(并且应该)使用内置的修饰器原创 2020-07-02 01:14:08 · 190 阅读 · 0 评论 -
python设计模式之外观模式
python设计模式之外观模式系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见。许多情况下,我们并不想把这种复杂性暴露给客户端。外观设计模式有助于隐藏系统的内部复杂性,并通过一个简化的接口向客户端暴露必要的部分。本质上, 外观( Facade)是在已有复杂系统之上实现的一个抽象层。1. 现实生活中的例子在现实中,外观模式相当常见。当你致电一个银行或公司,通常是先被连线到客服部门,客服职员在你和业务部门(结算、技术支持、一般援助等)及帮你解决具体问题的职员之间原创 2020-07-02 01:12:54 · 170 阅读 · 0 评论 -
python设计模式之享元模式
python设计模式之享元模式由于对象创建的开销,面向对象的系统可能会面临性能问题。性能问题通常在资源受限的嵌入式系统中出现,比如智能手机和平板电脑。大型复杂系统中也可能会出现同样的问题,因为要在其中创建大量对象(也可能是用户),这些对象需要同时并存。这个问题之所以会发生,是因为当我们创建一个新对象时,需要分配额外的内存。虽然虚拟内存理论上为我们提供了无限制的内存空间,但现实却并非如此。如果一个系统耗尽了所有的物理内存,就会开始将内存页替换到二级存储设备,通常是硬盘驱动器( Hard Disk Driv原创 2020-07-02 01:12:16 · 148 阅读 · 0 评论 -
python设计模式之模型-视图-控制器模式
python设计模式之模型-视图-控制器模式关注点分离( Separation of Concerns, SoC)原则是软件工程相关的设计原则之一。 SoC原则背后的思想是将一个应用切分成不同的部分,每个部分解决一个单独的关注点。分层设计中的层次(数据访问层、业务逻辑层和表示层等)即是关注点的例子。使用SoC原则能简化软件应用的开发和维护。模型—视图—控制器( Model-View-Controller, MVC)模式是应用到面向对象编程的Soc原则。模式的名称来自用来切分软件应用的三个主要部分,即模型原创 2020-07-02 01:11:28 · 465 阅读 · 0 评论 -
关于python中Enum的个人总结
关于python中Enum的个人总结初识可以通过enum模块导入语法初始化:可以通过enum_ = Enum('class_name', names,start = 1)来创建,其中names可以是字符串,可以是列表/元组。内部定义为: def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1): """Convenience method to原创 2020-07-01 12:05:30 · 207 阅读 · 0 评论 -
python设计模式之建造者模式
python设计模式之建造者模式 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成。只有当各个部分都完成了,这个对象才完整。建造者模式表现为复杂对象的创建与表现相分离,这样,同一个过程就有不同的表现。 假设我们要创建一个HTML页面生成器就可以使用建造者模式。该模式中,有两个参与者:建造者(builder)和指挥者(director)。建造者负责创建负责对象的各个组成部分。在HTML例子中,这些组成部分包括:页面标题、文本标题、内容主体和页脚。指挥者使用一个建原创 2020-07-01 08:41:42 · 221 阅读 · 0 评论 -
python设计模式之原型模式
python设计模式之原型模式 对于原型模式而言,其中最主要的部分就是关于一个对象的复制,其中就包含两个方面:1、浅复制;2、深复制。具体的区别请看我相关的随笔。这里简略的说明一下,浅复制就等于对象的引用,也就是b = object()这种,对于b的修改会影响到相关的对象;而深复制就相当于两个完全独立的东西,互不影响。 所以说,原型模式就是帮助我们创建对象的克隆,方便对象的分享和使用。在python中,通过使用copy.deepcopy()函数来完成。 代码实例如下:import copyc原创 2020-07-01 08:40:11 · 102 阅读 · 0 评论 -
浅谈python深复制与浅复制区别
话不多说,看代码原创 2020-07-01 08:39:32 · 100 阅读 · 0 评论 -
python关于函数调用作为参数的说明&&装饰器
python关于函数调用作为参数的说明&&装饰器简单的:先看代码:def out(): print('out') def inner(): return 'inner' return inner()if __name__ == '__main__': print(type(out()))输出结果:out<class 'str'>我们看到type函数的参数是out(),执行的过程就是:out原创 2020-07-01 08:38:51 · 176 阅读 · 0 评论 -
简述python中`functools.wrapper()
简述python中functools.wrapper()首先对于最简单的函数:def a(): passif __name__ == '__main__': print(a.__name__)输出结果:a然后稍微复杂点:def a(func): def wrapper() return func@adef b(): passif __name__ == '__main__' print(b.__name__)输出结果:a当加上functools.wrap原创 2020-07-01 08:37:39 · 558 阅读 · 0 评论 -
对于python装饰器结合递归的进一步理解
对于python装饰器结合递归的进一步理解代码如下:import functoolsdef memoize(fn): print('start memoize') known = dict() @functools.wraps(fn) def memoizer(*args): if args not in known: print('memorize %s'%args) # known[args原创 2020-07-01 08:36:40 · 130 阅读 · 0 评论 -
python设计模式之模板模式
python设计模式之观察者模式有时,我们希望在一个对象的状态改变时更新另外一组对象。在MVC模式中有这样一个非常常见的例子,假设在两个视图(例如,一个饼图和一个电子表格)中使用同一个模型的数据,无论何时更改了模型,都需要更新两个视图。这就是观察者设计模式要处理的问题。观察者模式描述单个对象(发布者,又称为主持者或可观察者)与一个或多个对象(订阅者,又称为观察者)之间的发布—订阅关系。在MVC例子中,发布者是模型,订阅者是视图。然而,MVC并非是仅有的发布—订阅例子。信息聚合订阅(比如, RSS原创 2020-07-04 19:27:14 · 336 阅读 · 0 评论 -
python设计模式之状态模式
python设计模式之状态模式面向对象编程着力于在对象交互时改变它们的状态。在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具。首先,什么是状态机?状态机是一个抽象机器,有两个关键部分,状态和转换。状态是指系统的当前(激活)状况。例如,假设我们有一个收音机,其两个可能的状态是在调频波段( FM)或调幅波段( AM)上调节。另一个可能的状态是从一个FM/AM无线电台切换到另一个。转换是指从一个状态切换到另一个状态,因某个事件或条件的触发而开始。通常,在一原创 2020-07-04 18:15:50 · 494 阅读 · 0 评论 -
python设计模式之观察者模式
python设计模式之观察者模式有时,我们希望在一个对象的状态改变时更新另外一组对象。在MVC模式中有这样一个非常常见的例子,假设在两个视图(例如,一个饼图和一个电子表格)中使用同一个模型的数据,无论何时更改了模型,都需要更新两个视图。这就是观察者设计模式要处理的问题。观察者模式描述单个对象(发布者,又称为主持者或可观察者)与一个或多个对象(订阅者,又称为观察者)之间的发布—订阅关系。在MVC例子中,发布者是模型,订阅者是视图。然而,MVC并非是仅有的发布—订阅例子。信息聚合订阅(比如, RSS原创 2020-07-04 17:34:07 · 416 阅读 · 1 评论 -
python设计模式之解释器模式
python设计模式之解释器模式对每个应用来说,至少有以下两种不同的用户分类。 基本用户:这类用户只希望能够凭直觉使用应用。他们不喜欢花太多时间配置或学习应用的内部。对他们来说,基本的用法就足够了。 高级用户:这些用户,实际上通常是少数,不介意花费额外的时间学习如何使用应用的高级特性。如果知道学会之后能得到以下好处,他们甚至会去学习一种配置(或脚本)语言。 能够更好地控制一个应用 以更好的方式表达想法 提高生产力解释器( Interpreter)模式仅能引起应用的高级用户的兴趣。这是原创 2020-07-04 17:11:41 · 251 阅读 · 0 评论 -
python设计模式之命令模式
python设计模式之命令模式现在多数应用都有撤销操作。虽然难以想象,但在很多年里,任何软件中确实都不存在撤销操作。撤销操作是在1974年引入的,但Fortran和Lisp分别早在1957年和1958年就已创建了撤销操作。命令设计模式帮助我们将一个操作(撤销、重做、复制、粘贴等)封装成一个对象。简而言之,这意味着创建一个类,包含实现该操作所需要的所有逻辑和方法。这样做的优势如下所述: 我们并不需要直接执行一个命令。命令可以按照希望执行。 调用命令的对象与知道如何执行命令的对象解耦。调用者无需知道命原创 2020-07-04 14:27:47 · 273 阅读 · 0 评论 -
python设计模式之责任链模式
python设计模式之责任链模式开发一个应用时,多数时候我们都能预先知道哪个方法能处理某个特定请求。然而,情况并非总是如此。例如,想想任意一种广播计算机网络,例如最早的以太网实现。在广播计算机网络中,会将所有请求发送给所有节点(简单起见,不考虑广播域),但仅对所发送请求感兴趣的节点会处理请求。加入广播网络的所有计算机使用一种常见的媒介相互连接。如果一个节点对某个请求不感兴趣或者不知道如何处理这个请求,可以执行以下两个操作。 忽略这个要求,什么都不做 将请求转发给下一个节点节点对一个请求的反应方原创 2020-07-04 13:45:31 · 382 阅读 · 0 评论 -
python设计模式之代理模式
python设计模式之代理模式在某些应用中,我们想要在访问某个对象之前执行一个或多个重要的操作,例如,访问敏感信息——在允许用户访问敏感信息之前,我们希望确保用户具备足够的权限。操作系统中也存在类似的情况,用户必须具有管理员权限才能在系统中安装新程序。上面提到的重要操作不一定与安全问题相关。延迟初始化是另一个案例:我们想要把一个计算成本较高的对象的创建过程延迟到用户首次真正使用它时才进行。这类操作通常使用代理设计模式( Proxy design pattern)来实现。该模式因使用代理(又名替代, s原创 2020-07-02 11:44:48 · 234 阅读 · 0 评论 -
关于python中Enum的个人总结
关于python中Enum的个人总结初识可以通过enum模块导入语法初始化:可以通过enum_ = Enum('class_name', names,start = 1)来创建,其中names可以是字符串,可以是列表/元组。内部定义为: def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1): """Convenience method to原创 2020-07-02 01:15:29 · 422 阅读 · 0 评论 -
Django使用mysql
Django使用mysql1. 本地创建mysql数据库,并开启2. 在setting.py文件中修改数据库配置:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'web_test', 'HOST': 'localhost', 'POST': '3306', 'USER': 'root', 'PASSW原创 2020-12-22 15:17:50 · 287 阅读 · 0 评论 -
Django中ORM的使用
Django中ORM的使用ORMorm(object-relation-mapping)对象关系映射,即用对象来表示关系数据库中的表:类 --> 表,对象–>一行数据对象的属性–>一行属性的一个字段比如说一个用户信息表:class User: def __init__(self,name,age): self.name = name self.age = age这样我们就定义了一个类,有name和age属性,之后原创 2020-12-21 21:37:58 · 235 阅读 · 0 评论 -
Django配置静态登录页面
开始学习Django,配置静态登录页面准备阶段众所周知,Django是一个重量级的设备齐全的web开发框架。在学习Django前我们需要具备如下的知识点:python基础编程并发网络编程HTTP协议的一些基础知识前端的基础知识(html+css+js)这里主要是http相关的事情,首先,我们需要知道当我们在浏览器输入地址后到浏览器显示内容所发生的操作。首先, DNS域名服务器解析地址,获取服务器计算机尝试连接服务器连接成功后,发生请求服务器收到请求,并返回响应数据计算机断开T原创 2020-12-14 15:47:32 · 611 阅读 · 0 评论 -
python中的反射
python中的反射反射原理:在python中万物皆对象,对象中的所有的属性和方法都是通过字典形式保存的,如果我们想获得对象中的某个属性或方法只需要:首先获得该对象的所有属性和函数的字典通过键key的索引获取相应的值class A: def __init_(self, name): self.name = name def func(self): passa = A('a) setattr(a, 'age', 10)原创 2020-11-03 15:58:21 · 443 阅读 · 1 评论 -
python中list的remove()中的坑
摘要:对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素。常见用法: a = [1,2,3,4],a.remove(1),然后a就是[2,3,4];对于a = [1,1,1,2],其结果也是[1,1,2],这是最基本的用法。但是对于下面这个:a = [1,2,3,4]for i in a: a.remove(i)# 结果a = [2,4]或者说a = [原创 2020-10-11 21:43:37 · 688 阅读 · 0 评论 -
python设计模式之策略模式
python设计模式之策略模式大多数问题都可以使用多种方法来解决。以排序问题为例,对于以一定次序把元素放入一个列表,排序算法有很多。通常来说,没有公认最适合所有场景的算法一些不同的评判标准能帮助我们为不同的场景选择不同的排序算法,其中应该考虑的有以下几个。 需要排序的元素数量:这被称为输入大小。当输入较少时,几乎所有排序算法的表现都很好,但对于大量输入,只有部分算法具有不错的性能。 算法的最佳/平均/最差时间复杂度:时间复杂度是算法运行完成所花费的(大致)时间长短,不考虑系数和低阶项①。这是选择算法原创 2020-07-04 18:52:56 · 3985 阅读 · 1 评论