python
文章平均质量分 92
libing_thinking
长风破浪会有时,直挂云帆济沧海
展开
-
python 设计模式-外观模式
外观模式隐藏了内部对象的复杂性,向外提供了简单的一致性接口。示例代码如下:from abc import ABCMeta, abstractmethodclass Component(metaclass=ABCMeta): @abstractmethod def oper(self): pass class ComponentA(Componen...原创 2019-10-08 11:33:28 · 278 阅读 · 0 评论 -
python 设计模式-命令模式
命令模式中的角色主要有:抽象命令、具体命令、命令接收者、命令调用者,命令接受者隔离了命令调用者和具体的命令。代码示例:from abc import ABCMetafrom abc import abstractmethodclass Command(metaclass=ABCMeta): def __init__(self, receiver): self._...原创 2019-09-30 11:02:50 · 209 阅读 · 0 评论 -
python 设计模式-责任链模式
责任链模式的关键在于请求会沿着责任链传播,直到处理成功。我们模拟OA上费用报销的流程,上代码:from abc import ABCMeta, abstractmethodclass Role(metaclass=ABCMeta): def setNext(self, role): self._next_role = role def getNext(s...原创 2019-09-29 18:15:23 · 276 阅读 · 0 评论 -
python 设计模式-装饰器模式
装饰器模式实现起来跟代理模式差多,其实可以是一样的,看你把它置于什么场景。代理模式侧重于隔离客户与被代理者,通过代理者控制访问被代理者的权限,而装饰器模式侧重于给被装饰的对象提供附加的功能,例如加上日志功能。python 语法层面就提供了装饰器,足以说明装饰器的重要性,这里我们就直接介绍python的装饰器吧。先看看函数装饰器:def work_wrapper(w): def func...原创 2019-09-29 16:48:21 · 251 阅读 · 1 评论 -
python 设计模式系列
自从GOF书里提出了23种设计模式后,设计模式开始风靡,GOF中的设计模式成了典型案例,从测试到开发,再到架构,无一不把它奉为经典。其实有时候不必纠结于这是什么模式,关键看自己的场景,不要为了模式而模式,自己实践时你可能常常会发觉这不就是什么什么模式吗,设计模式也没啥高深的东西哈,只是别人先给他取了个名字。但是,值得肯定的是,牛人经过总结,提炼出了更纯粹的模式,以及更优雅的实现方式,更符合面向对象...原创 2019-09-29 12:26:25 · 283 阅读 · 0 评论 -
python 设计模式-代理模式
代理模式中主要存在三种角色:被代理者、代理者、客户。使用商品代理商举例应该很好理解,一个品牌厂商可以有多个代理商,客户买产品不是直接找产家,而是通过代理商购买。这里使用python 对代理模式进行一个简单的实现。from abc import ABCMeta, abstractmethodclass Service(metaclass=ABCMeta): @abstractmeth...原创 2019-09-29 10:45:00 · 230 阅读 · 0 评论 -
python 设计模式-观察者模式
观察者模式中主要两个核心角色:主题和观察者,兼顾面向对象的一些原则,还可以抽象出抽象主题和抽象观察者角色。这里使用 python 对观察者模式进行一个简单的实现,python 是 ‘鸭子类型’ 的语言,天生就兼容各种接口,只要类中提供了相应的方法就行,所以特意弄个抽象类搞得有点画蛇添足了,但有时候为了让开发人员少犯错误,为开发提供统一规范,提供一些抽象类作为基类使用也是合理的。from abc ...原创 2019-09-29 09:47:56 · 298 阅读 · 0 评论 -
python 设计模式-状态模式
状态机是我们开发过程中经常会用到的概念,它可以使我们的程序逻辑清晰,可维护性更强。这里对python中状态模式的实现做个简单的介绍。from abc import ABCMeta, abstractmethodclass State(metaclass=ABCMeta): @abstractmethod def handler(self, context): ...原创 2019-09-28 18:57:17 · 240 阅读 · 0 评论 -
python 设计模式-模板模式
模板模式,顾名思义创建一个做类似事情的模板。这里我们使用 abc 模块创建我们的抽象模板类:from abc import ABCMeta, abstractmethodclass WorkTemplate(metaclass=ABCMeta): def work(self): self.pre_work() self.do_work() ...原创 2019-09-28 14:57:27 · 255 阅读 · 0 评论 -
python 设计模式-简单工厂
工厂模式也是最常用的设计模式之一,可以分为简单工厂、工厂方法、抽象工厂三大类型。这里就python中简单工厂的实现做个简单说明,我们从最普通的实现一步一步优化。先看代码:#!/usr/bin/env python#coding: utf-8class DesktopPC: passclass AllInOnePC: passclass Laptop: p...原创 2019-09-28 12:54:44 · 259 阅读 · 0 评论 -
python 设计模式-单例模式
单例模式是最简单,也是最常用的一种设计模式,每种语言实现它的方式也有很多种。这里主要针对python中的实现进行说明,个人觉得使用重写__new__的方式来实现单例是最优雅的。先看下面这个例子:class Singleton: __instance = None def __new__(cls, *args, **kwargs): if cls.__i...原创 2019-09-27 12:01:53 · 321 阅读 · 1 评论 -
python super 浅析
对于面向对象的语言,子类调用父类的方法是共有的需求。大部分面向对象高级语言都使用super这个关键字,在python中也使用了super这个名词,但不是作为关键字,是一个内置的类,使用这个类的实例可以访问到父类的方法,父类说法太模糊,准确的说应该是当前类的MRO顺序中的下一个类。为了对比super的效果,我们先直接使用父类名称的方式调用其方法,如下 #!/usr/bin/env python...原创 2019-09-26 21:40:21 · 176 阅读 · 0 评论 -
python 设计模式-建造者模式
建造者模式中核心的角色是建造者和指导者,下面代码演示了一个产品建造的过程:from abc import ABCMeta, abstractmethod, abstractpropertyclass Product: def __init__(self): self._parts = [] def info(self): p...原创 2019-09-30 15:00:42 · 192 阅读 · 0 评论 -
python 设计模式-享元模式
享元模式是一种比较简单的设计模式,用的也比较多,他可以有效复用对象,在一定程度上提高程序的性能。我们常见的池化技术其实就是享元模式的一类实现。代码示例:from abc import ABCMeta, abstractmethodclass FlyWeight(metaclass=ABCMeta): def __init__(self, extrinsic): ...原创 2019-09-30 16:45:49 · 200 阅读 · 0 评论 -
python 设计模式-原型模式
个人理解原型模式就是对象的拷贝,在创建一个新的对象的成本相对较高的时候,可以以一个现成对象为范本,复制出一个对象。python 为对象的拷贝提供了一个标准模块 copy,我觉得就没必要生搬硬套地按照对象关系写什么原型模式了,直接用吧。代码示例如下:#!/usr/bin/env python#coding: utf-8from copy import copyclass Proto: ...原创 2019-10-02 16:19:03 · 217 阅读 · 0 评论 -
python 设计模式-桥接模式
桥接模式的目的是为了解耦抽象与实现,使得抽象部分与实现部分可以独立变化。示例代码如下:from abc import ABCMeta, abstractmethodclass Abstract(metaclass=ABCMeta): def __init__(self, implement): self._implement = implementclass ...原创 2019-10-08 11:24:49 · 258 阅读 · 0 评论 -
python 设计模式-组合模式
组合模式强调整体和部分的层次关系,以及整体和部分对外接口的一致性。示例代码如下:from abc import ABCMeta, abstractmethodfrom collections import OrderedDictclass Component(metaclass=ABCMeta): def __init__(self, attr): self._a...原创 2019-10-08 11:05:58 · 225 阅读 · 0 评论 -
python 设计模式-适配器模式
适配器一般是为了解决接口的兼容性问题,新瓶装旧酒。示例代码如下:from abc import ABCMeta, abstractmethodclass Target(metaclass=ABCMeta): @abstractmethod def target_oper(self): passclass Adaptee: def oper(se...原创 2019-10-08 09:45:38 · 214 阅读 · 0 评论 -
python 设计模式-访问者模式
访问者模式中的主要角色有访问者、元素、对象结构,目的是为了将对象数据和操作进行分离,特别适用于对象结构稳定但是操作经常变化的情况。示例代码如下:from abc import ABCMeta, abstractmethodclass Element(metaclass=ABCMeta): @abstractmethod def accept(self, visitor):...原创 2019-10-07 18:51:42 · 236 阅读 · 0 评论 -
python 设计模式-策略模式
策略意指算法,给定不同的策略,可以对相同的上下文环境执行不同的算法。from abc import ABCMeta, abstractmethodclass Strategy(metaclass=ABCMeta): @abstractmethod def oper(self, *args, **kwargs): passclass StrategyA(...原创 2019-10-04 17:32:37 · 172 阅读 · 0 评论 -
python 设计模式-解释器模式
解释器模式主要用于语言语法的解析,我们平常开发中用的比较少。示例代码如下:#!/usr/bin/env python#coding: utf-8from abc import ABCMeta, abstractmethodclass Expression(metaclass=ABCMeta): @abstractmethod def interpret(self, c...原创 2019-10-02 21:17:25 · 221 阅读 · 0 评论 -
python 设计模式-备忘录模式
备忘录模式主要用来做对象状态回退处理的,例如我们最常见的WORD里的撤销操作。示例代码如下:#!/usr/bin/env python#coding: utf-8class Memento: def __init__(self, state): self._state = state @property def state(self): ...原创 2019-10-02 20:51:35 · 209 阅读 · 0 评论 -
python 设计模式-中介者模式
中介者主要用于对多对象交互进行解耦,所有对象相互之间不直接联系,所有事情都是通过中介者来操作。看下面代码:#!/usr/bin/env python#coding: utf-8from abc import ABCMeta, abstractmethod, abstractpropertyclass Mediator(metaclass=ABCMeta): @abstractp...原创 2019-10-02 19:01:12 · 250 阅读 · 0 评论 -
python 设计模式-迭代器模式
迭代器是一种很常用的设计模式,python 在语言层面也对迭代器进行了友好的支持,我前面有一篇介绍迭代器和可迭代对象的文章,初学者可以先了解下概念,这里主要通过代码示例进行说明。#!/usr/bin/env python#coding: utf-8class ProductLst: def __init__(self): self._product_lst = []...原创 2019-10-02 18:05:10 · 217 阅读 · 0 评论 -
python 设计模式-抽象工厂模式
个人理解抽象工厂模式就是将工厂方法模式进行了一般化,一个工厂不仅仅只生产一种产品,而是一个产品族。示例代码如下:from abc import ABCMeta, abstractmethodfrom Tools.scripts.serve import appclass Factory(metaclass=ABCMeta): @abstractmethod def pr...原创 2019-10-02 17:07:17 · 347 阅读 · 0 评论 -
python 设计模式-工厂方法模式
前面我们介绍了简单工厂模式,每次添加新的产品需要对工厂代码进行相应修改,后面我们对它进行了一系列的优化,到最后把只需要对新建工厂时的参数进行调整就OK了。这里进一步对工厂的另一种形式进行介绍,工厂方法不仅对产品进行了抽象,对生产产品的工厂也进行了抽象,这样新加产品后只要新建相应的工厂就行,更符合面向对象的开闭原则。示例代码如下:from abc import ABCMeta, abstract...原创 2019-10-02 16:47:01 · 236 阅读 · 0 评论 -
python 多路复用示例
IO多路复用是处理高并发常用的一种处理手段,他可以有效的提高系统的吞吐率,处理的链接越多他体现的优势越明显。谈到这个名词,比较有代表性的是linux上的epoll、windows上的iocp、BSD上的kqueue,这些都是操作系统内核实现的功能,高级语言一般会对这些调用进行下封装,方便用户使用。这里主要是python上多路复用的使用方法的几个例子,python提供了select模块,在linux...原创 2019-09-26 16:10:48 · 501 阅读 · 0 评论 -
python 闭包理解
网络上大家对闭包的定义一般是说“能够读取外部函数变量的函数”,一直感觉这个有点理解上不是那么自然。这里以python3为例,通过简单的实践解析下它里面的闭包到底是个什么样的东西。先来个简单的例子:def func_wrapper(a): def func1(x): return a*x def func2(x): return...原创 2019-09-24 12:17:57 · 1032 阅读 · 0 评论 -
DJANGO NOTES
应用必须先注册,模板才能搜索到templates 搜索顺序为应用注册的顺序,为了避免搜索错误,可以在templates文件下新建一个与应用同名的文件夹include 包含模板写相对于templates的顺序include 时路径后不能带空白字符,否则模板将搜索不到...原创 2018-03-01 15:50:40 · 278 阅读 · 0 评论 -
Celery-4.1 用户指南: Workers Guide
启动工作单元停止工作单元重启工作单元处理信号文件路径中的变量并行远程控制命令时间限制速率限制每个孩子的最大任务数每个孩子的最大内存自动扩展队列探查工作单元附加命令编写自己的远程控制命令翻译 2017-11-20 11:08:20 · 5826 阅读 · 0 评论 -
Celery-4.1 用户指南: Canvas-设计工作流
签名PartialsImmutabilityCallbacks原语ChainsGroupsChordsMap & StarmapChunks翻译 2017-11-18 20:44:44 · 5465 阅读 · 0 评论 -
Celery 浅析
Celery 是用python实现的一个分布式的任务处理系统,对于需要高可用异步处理的系统来说是它一个不错的选择。本来想实现一个分布式任务处理系统,当看到celery后感觉没有必要再自己写,需要的功能都已经实现,系统的各方面都考虑的比较周全,官方文档也很完善,而且社区活跃度也很高,据官网描述已经有一些公司在生产环境应用。本文对 celery 的基础知识进行一个简单介绍。主要组件broker 消息原创 2017-11-14 13:42:01 · 1376 阅读 · 1 评论 -
Celery-4.1 用户指南: Calling Tasks
基础本文档描述 Celery 中任务实例和 Canvas 使用的统一 “Calling API”。API 中定义了一个执行选项的标准集,以及三个方法: - apply_async(args[, kwargs[, ...]]) 发送任务消息 - delay(*args, **kwargs) 发送任务消息的简写,不支持执行选项 - calling(__call__) 直接调用任务对象,意味着翻译 2017-11-17 17:35:45 · 10641 阅读 · 0 评论 -
PYTHON SHELL AUTOCOMPLETE CONFIG
create python start up script .pythonrcimport rlcompleter, readline, os atexitreadline.parse_and_bind('tab: complete')history_file = os.path.expanduser('~/.python_history')readline.read_history_file原创 2017-10-23 10:23:02 · 394 阅读 · 0 评论 -
PyQt5 NOTE
PyQt5 使用笔记开发环境搭建开发环境 IDE 可以使用 PyCharm,有社区版的,专业版的 liscence 也很容易找到最简单的方式,直接使用 Conda 集成平台安装 Qt5, python3, PyQt5 二进制安装包安装 Qt5, python3, PyQt5 源代码,编译安装 note: 如果不需要编译,可以不用安装 Qt5,直接安装 Qt de原创 2017-04-13 16:33:25 · 1371 阅读 · 0 评论 -
PYTHON 下划线作用
Python 中下划线的用途单下划线前缀from module import * 时不导入相关变量双下划线前缀私有变量,不能直接访问 只对类中字段有效,对模块下直接定义的变量作用同单下划线前缀双下划线前后缀解释器根据相关语法糖自动调用,除非重写系统定义的一些方法,否则一般无需自定义这样的标志名解释器中作用保存解释器中最后一个表达式的结果原创 2017-02-04 13:28:26 · 590 阅读 · 0 评论 -
Python 多变量赋值
记得以前在C语言里写个交换变量值的逻辑,我们一般会引入一个中间变量,例如交换变量a和b的值,我们会这样写 temp = a; a = b; b = temp;,感觉很是啰嗦。在 Python 里,我们可以直接写成 a, b = b, a,感觉代码一下子简洁清晰了许多。这里对Python 中多变量赋值相关的要点简要总结下。基本用法- 忽略值不定长解析原创 2017-02-09 00:12:52 · 4635 阅读 · 0 评论 -
Python 迭代器与可迭代对象
迭代器是Python中非常重要的一个概念,很多的操作都是基于迭代器去做的, 比如说我们最常用的 for 循环,还有生成器其实也是一个迭代器,所以说迭代器也不是什么神秘的东西,这里我们对迭代器的用法及原理进行一个简单的总结。iter函数其实系统内置的iter 函数只是调用对象的iter方法,这个方法按照协议会返回一个迭代器,使得for循环这样的语法结构能够进行下去。可迭代对象实现了iter 方法原创 2017-02-16 10:45:19 · 3475 阅读 · 0 评论 -
Package Management
Package Management为了实现软件功能的复用,在Python中定义了包、模块、类、函数等组件。若干函数和类组成了模块,若干模块及子包组成了包。包的概念在各主流语言中都有,项目一旦到达一定的规模就必定会需要包类似的结构进行功能重组、复用。这里对Python中包的使用进行简单总结,并类比其他几种语言中的包管理机制。Python 函数函数是功能复用的基本单位Python 类在面向对象原创 2017-01-01 18:59:37 · 976 阅读 · 0 评论 -
PYTHON 常用库笔记 - random
常用函数random[0, 1) 之间随机浮点数random.random()uniform[a, b] 之间浮点数random.uniform(a, b)randrange[a, b] 之间以step为间隔的整数random.randrange(a, b, step)choice给定字符串中的随机一个字符random.choice("abcdefghi")randint[原创 2016-07-22 10:53:15 · 506 阅读 · 0 评论