
python
文章平均质量分 57
ruguowoshiyu
这个作者很懒,什么都没留下…
展开
-
python 配置文件读取
如何使用配置文件配置像端口号,ip,静态地址等参数可以使用configparser模块中的ConfigParser类,使用方法如下第一步,在main函数同级路径下创建后缀名为.cfg的文件,比如system.cfg。此文件包含程序所需所有的配置文件如, ip,端口,链接mysql使用的用户名和密码等如下:system.cfg[SYSTEM]author = author[...原创 2018-04-10 21:08:33 · 330 阅读 · 0 评论 -
python 设计模式(十一) 代理模式(Proxy pattern)
代理模式在日常生活中很常见,比如,你去杂货店买一个插座,而不是去生产插座的工厂去买。再比如,你去访问某个网站,你并没有访问权限,但你可以通过代理去访问这个网站,然后代理再把内容传给你。讲代理模式之前,先讲下正向代理和反向代理的区别:正向代理上面访问网站的例子就是正向代理,可以用下面的流程图展示这一机制。正向代理:客户端访问某网站,先访问代理,代理去访问某网站,然后把内容返回给客户端,这就是...原创 2018-07-09 11:48:34 · 1603 阅读 · 0 评论 -
python 设计模式(九) 适配器模式(adapter pattern)
适配器模式适应在这种场景:客户端需要调用类的方法,但这个类没有这个方法,可以把这个类放到适配器类中加工一下,让适配器具有这有这个方法,这个适配器方法来做类方法的封装。比如,客户端想调用类A的watch_tv方法,但类A中只有turn_on_power(),turn_on_tv()方法。因此可以把类A放入适配器类中,让适配器具有watch_tv方法,并且这个watch_tv方法是turn_on_po...原创 2018-07-04 09:02:07 · 445 阅读 · 0 评论 -
python 设计模式(十二) 组合模式(composite pattern)
组合模式的经典定义:将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 举例如下:学校里的教员包括校长,也包括年级主任,也包括普通的学科老师。校长管理年级主任和普通老师,普通老师又被年级主任管理者。下面实现了staff抽象类,teacher(教员)和director(校长和年级主任)都继承自staff抽象类。具体实现如下:import ab...原创 2018-07-10 19:09:01 · 926 阅读 · 0 评论 -
python 设计模式(六) 观察者模式(Observer pattern)
观察者模式即当被观察对象发生变化时,能及时通知观察者,这种需求主要用在网站或者店铺的关注上,比如你关注了某个微信公众号,或者淘宝上的商家,当公众号有更新或者店家新到商品或者商品促销时,可以及时通知你。代码实现了E_commerce被观察对象基类。主要实现了属性_observers和方法add_observer(注册观察者),delete_observer(注销观察者), notify_all_ob...原创 2018-06-29 09:15:22 · 1604 阅读 · 0 评论 -
python 设计模式(十) 装饰者模式(Decorator pattern)
大家知道,装饰器可以给对象动态地添加行为。装饰器的两大应用场景是:1 权限验证2 添加日志当然装饰器能应用的场景要远多于2种,下面分别用代码实现权限验证和日志:1 权限验证from functools import wrapsdef login_check(func): ''' Decorator check whether user is logged in ...原创 2018-07-05 09:11:35 · 1322 阅读 · 0 评论 -
python 设计模式(十三) 外观模式(facade pattern)
外观模式又称包装外观模式,从字面意思很好理解,即对某一类复杂操作的封装。封装出更直观通用的接口类,然后给客户端调用。比如,你离开家,要关上灯,关上空调,关上电源等,这是一系列很麻烦的操作,因此,你可以把这一系列的操作封装到一个类中,然后让客户端调用。举例如下:class Equipment(object): def __init__(self): self.name =...原创 2018-07-12 09:06:28 · 570 阅读 · 0 评论 -
python 设计模式(十四) 模型-视图-控制器模式(Model-View-Controller pattern)
本节选自《精通Python设计模式》【荷】Sakis Kasampalis 关注点分离(Separation of Concerns, SoC)原则是软件工程相关的设计原则之一,SoC原则背后的思想是将一个应用切分为不同的部分,每个部分解决一个单独的关注点。分层设计中的层次(数据访问层,业务逻辑层和表示层等)即是关注点的例子。使用SoC原则能简化软件应用的开发和维护 模型-视图...原创 2018-07-18 08:54:12 · 4153 阅读 · 0 评论 -
python 扩展包资源网站 很好的网站
项目需要安装一个python扩展包 Levenshtein,计算编辑距离的。也可以自己实现计算编辑距离。但跟调包相比,要慢300倍。这篇播客进行了对比Python “编辑距离”(Levenshtein distance)函数的比较。感兴趣的可以去看看。 为了下载这个包就去像往常一样去了pypi,搜到了一个2014年的更新, 然后下载安装。发现安装不了。后来在一篇播客发现了这个网站,...原创 2018-07-05 17:23:12 · 2010 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则三 依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则1 高层级的模块不应该依赖于低层次的模块,它应该依赖于低层次模块的抽象2 抽象不应该依赖于具体,具体应该依赖于抽象1 高层次的模块不应该依赖于低层次的模型,它应该依赖于低层次模块的抽象什么叫高层次模型,通常所说的客户端就是高层次模型,而其调用的接口即是低层次的模型,这句话也可以说,客户端不应该依赖于接口的具体,而是依赖于接口的抽象。依赖倒置原则的百度百科,举了一个很...原创 2018-07-24 09:12:35 · 3166 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则四 接口隔离原则(Interface Segregation Principle)
接口隔离原则说明:1 客户端(调用方)不应该依赖于它不需要的接口 2 类之间的依赖关系应该建立在最小接口上比如有两个客户端a,客户端b,都通过接口1分别依赖于类a和类b。客户端a通过接口1依赖于类a的方法1和方法2。而客户端b通过接口1依赖于类b的方法2和方法3。那么如果这样的话,接口1就要实现方法1,方法2,方法3。这个接口1就有点庞杂了。而且,客户端a要实现自己...原创 2018-07-25 20:03:01 · 1041 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则五 迪米特原则(Law of Demeter)
迪米特原则又称最少知识原则(least knowledge principle)简称LKP。意思是说一个对象应该对其他对象有尽可能少的了解。本篇播客参照了迪米特原则的百度百科,以及这篇播客 六大设计原则之迪米特原则。thanks a lot。迪米特原则的一个解释是(talk only to your immediate friends)。只与直接朋友对话。什么是直接朋友呢。两个类有耦合就是...原创 2018-07-29 14:57:53 · 747 阅读 · 0 评论 -
如何求一个数的加法组合
如何求一个数的加法组合,比如3的加法组合为1+1+1 = 3, 1+2 = 3两种,4的加法组合为1+1+1+1 = 4,1+1+2 = 4,1+3 = 4,2+2=4。从上可以看出每考虑组合元素顺序问题。对于1+2=3,2+1=3都看出是一类的。采用递归的方式实现,python代码实现如下。参考播客import copydef calculate_add_combination_4_...原创 2018-08-01 09:04:25 · 3280 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则六 开放封闭原则(open closed principle)
https://yq.aliyun.com/articles/45638开放封闭原则,是面向对象编程的核心,也是其他五大设计原则实现的终极目标。只有对抽象编程,而不是对具体编程才是遵循了开放封闭原则。开放:指的是软件对扩展开放。封闭:指的是软件对修改封闭。即软件增加或改变需求是通过扩展来到,而不是通过修改来实现的。即一个类定型后尽量不要去修改。而是通过增加新类来满足需求。举例:...原创 2018-08-02 21:14:59 · 1108 阅读 · 0 评论 -
python 调用命令行工具
利用python 调用命令行工具软件from subprocess import callpassword = ''pdf_path = './pdf/1.pdf'decrypted_pdf_path = './decrypted_pdf/1.pdf'call('D:\\Users\\guo\\qpdf-8.0.2\\bin\\qpdf.exe --password=%s --d...原创 2018-08-15 19:30:57 · 2366 阅读 · 0 评论 -
python ./lib/train.py 路径说明 os.getcwd() os.path.dirname(__file__)
当在terminal中运行 python ./lib/train.py时,以下代码的输入结果为import osprint(os.getcwd()) # . 打印的是项目根目录print(os.path.dirname(__file__)) # ./lib 打印的是.py脚本的路径 ...原创 2018-11-21 09:58:28 · 524 阅读 · 0 评论 -
python 设计模式(八) 模板方法模式(template method pattern)
模板方法模式:父类定义了抽象方法和调用抽象方法顺序执行的方法,子类override父类的抽象方法。比如在解决需要分部执行的问题就可以采用这种方法。还以炒菜举例:背景:小明的父母出远门度假去了,只有小明和姐姐一个人在家,碰巧小明的姐姐失恋了,无心为小明准备食物。看来小明只能自己准备饭菜了, 饭是好准备的,交个电饭煲就行了。哪菜呢?这可是个头疼事,不会做怎么办,只能谷歌了。GOOGLE了一小时后,小明...原创 2018-07-01 12:38:05 · 536 阅读 · 0 评论 -
python 设计模式(七) 命令模式(command pattern)
命令模式是利用类来实现对命令函数的封装,实现命令调用者和命令接收者之间的解耦,命令模式具体包括三部分:1 命令调用者(客户端,调用命令的函数或者类)2 命令(对命令接收者命令函数的封装)3 命令接收者(真正执行命令的地方,实现了众多命令函数)三者的关系如下图具体代码实现如下import abcclass Receiver(object): ''' 命令接收者,正在执行命令的地...原创 2018-06-30 13:35:22 · 1670 阅读 · 0 评论 -
python 设计模式(五) 策略模式(Strategy pattern)
举例一种常见,根据参数的值来做相应处理。比如,同一个网页,对于管理员来说,某地方显示为编辑按钮,但对于一般用户则不显示。这个逻辑很容易实现,只需用if else实现即可。一种场景,大学开学第一天。cs(computer science)专业的学生和es(software engineering)专业的同学共享辅导员。辅导员需要把这两个专业的学生都介绍一遍。如下,代码中实现了一个抽象student类...原创 2018-06-25 19:31:12 · 1197 阅读 · 0 评论 -
python tqdm模块的简单使用
在处理大规模数据时或者需要迭代多次耗时很长的任务时,可以利用Python tqdm模块来显示任务进度条。常用的是tqdm模块中的tqdm和trangetqdm使用方法:tqdm.tqdm(可迭代对象) ,括号中的可迭代对象可以是个list,tuple等,具体如下代码: from tqdm import tqdm,trangeimport timea = [1,2,3]for i in t...原创 2018-04-11 20:43:56 · 15951 阅读 · 1 评论 -
python os模块walk使用
如何递归地遍历文件夹下的所有文件。如根目录路径为'./Data/',路径下的文件结构如下:Data/ 1/ 1.txt 2.txt 3.txt 4.txt 2/ 1.txt 2.txt 3.txt 4.txt 3/ 1.txt...原创 2018-04-18 09:19:23 · 1083 阅读 · 0 评论 -
如何让python程序结束后可以直接调出ipython
在程序的最后加上这一句from IPython import embed; embed()这样,可以在run窗口输入变量名,进而查看变量原创 2018-04-23 19:27:55 · 776 阅读 · 0 评论 -
windows下相对路径运行py文件
python .\\a\\worker.pywindows系统,在当前目录下,运行a文件夹下的worker.py原创 2018-04-24 16:47:51 · 2024 阅读 · 0 评论 -
python io模块的BytesIO,StringIO
1.BytesIO()2.StringIO()3.StringIO().getvalue()原创 2018-05-09 20:30:01 · 1535 阅读 · 0 评论 -
python base64 模块
1. base64.b64encode()2. base64.decodebytes()原创 2018-05-10 09:16:16 · 492 阅读 · 0 评论 -
遍历时满足条件remove要谨慎
昨天,一个bug调了快一天,怎么都调不出来。让我一度以为python语言有bug,现在想想自己多么自大。以后不管再发生什么bug。一定是自己的错误,或者是对模块的使用理解有问题。在一边遍历,一边判断满足条件删除时,不要从前面进行遍历。假设一个列表a_list = [1,2,3,2,4]如果遍历这个list,并在删除为2的条目如果这样写代码for item in a_list: if ite...原创 2018-05-17 09:22:20 · 792 阅读 · 0 评论 -
python 设计模式(一) 单例模式
单例模式单例模式:不管用类实例化对象多少次,所得到的对象都是同一个对象。这种模式的应用场景,如数据库连接,配置信息等。1 通过类的嵌套实现单例# create singleton by means of class nestificationclass Singleton(object): # really working class class Wrapper_class(o...原创 2018-06-11 18:56:05 · 334 阅读 · 0 评论 -
python 设计模式(二) 六大设计原则一 单一职责原则(SRP)
单一职责原则(single responsibility principle) 简称SRP。There should never be more than one reason for a class to change.仅有一种原因引起类的改变。一个类只负责一个职责。单一职责原则 这地址讲的很好,但不是用python语言实现的,在这里我用python语言实现一下。问题由来:类A负责...原创 2018-06-12 09:20:10 · 1330 阅读 · 0 评论 -
python 设计模式(三) 工厂模式
1 简单工厂模式2 工厂模式3 抽象工厂模式原创 2018-06-13 09:29:13 · 1976 阅读 · 0 评论 -
python 设计模式(四) 建造者模式(builder design pattern)
建造者模式 我们想要创建一个有多个部分构成的对象, 而且它的构成需要一步步地完成,只有各个部分都创建好了,这个对象才算完成,因此就诞生了建造者模式。建造者模式将一个复杂的构造过程与其表现分离,这样, 同一个构建过程(使用同一个指挥者)可用于创建多个不同的表现。 建造者模式一般包括:一个指挥者(director), 多个建造者(builder),比如你去Kfc点餐,你要了个鳕鱼堡,你同...原创 2018-06-21 08:48:04 · 1075 阅读 · 0 评论 -
python 获取时间并格式化(strftime, localtime)
获取时间并转换为易读格式用到的模块time中的strftime, localtimefrom time import strftime, localtimeprint(strftime('%Y-%m-%d %H:%M:%S',localtime()))结果2018-06-06 18:40:41原创 2018-06-06 18:42:02 · 30665 阅读 · 2 评论 -
python 设计模式(二) 六大设计原则二 里氏替换原则(Liskov Substitution Principle)
里氏替换原则简称LSP。定义:所有引用基类的地方必须能够透明地使用其子类的对象。所谓对象是一组状态和一系列行为的组合。状态是对象的内在特性,行为是对象的外在特性。LSP所表述的就是在同一个继承体系中的对象应该有共同的行为特征。我们在设计对象时是按照行为进行分类的,只有行为一致的对象才能抽象出一个类来。因此,如果说鸵鸟和企鹅属于鸟类的话,就违背了里氏替换原则。如何规范地遵从里氏替换原则:1 子类必须...原创 2018-06-13 20:19:41 · 1435 阅读 · 0 评论 -
虚拟环境创建和开发环境配置
1创建虚拟环境pip install virtualenvpip install virtualenvwrappervirtualenvwrapper是依赖于virtualenv的,要先安装virtualenv mkvirtualenv 虚拟环境名称 如果在使用mkvirtualenv命令创建虚拟环境时报错:mkvirtualenv: command not foun...原创 2018-05-30 20:10:34 · 415 阅读 · 0 评论 -
python 查看对象的属性和方法
dir方法print(dir(obj)) obj为对象名, 此命令打印对象所有属性和方法如a = [1,2]print(dir(a))结果如下['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', ...原创 2018-06-01 16:19:56 · 30557 阅读 · 3 评论 -
字典的copy,deepcopy
1 字典的浅拷贝:value为可变对象的情况,则共用,value为不可变的情况则复制,复制的对象不受原字典value变化的影响2 字典中没有深拷贝,要先引入,from copy import deepcopy 对于深拷贝value无论为可变对象还是为不可变对象,都会复制3 对原字典使用 del后,浅拷贝和深拷贝字典都不会被删除4 list中不存在copy方法只能通过 from cop...原创 2018-11-21 10:31:44 · 504 阅读 · 0 评论