12 2012 档案

摘要:工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类实例化延迟到子类。 阅读全文
posted @ 2012-12-28 16:09 践道者 阅读(165) 评论(0) 推荐(0) 编辑
摘要:代理模式:为其他对象提供一种代理以控制对这个对象的访问 阅读全文
posted @ 2012-12-28 15:39 践道者 阅读(142) 评论(0) 推荐(0) 编辑
摘要:装饰器模式:动态地给我一个对象添加一些额外的职责,就增加功能来说,比增加子类更为灵活。应用范围:加密数据、日志记录、过滤器还要注意装饰顺序 阅读全文
posted @ 2012-12-28 11:27 践道者 阅读(133) 评论(0) 推荐(0) 编辑
摘要:里氏替换原则:一个软件实体如果使用的是一个父类,那么一定适用于其子类,而且察觉不出父类对象和子类对象的区别,也就是说,子类型必须能够替换掉它们的父类型。 阅读全文
posted @ 2012-12-28 11:00 践道者 阅读(259) 评论(0) 推荐(0) 编辑
摘要:依赖倒置原则:1、抽象不应该依赖于细节,细节应该依赖于抽象,也就是说针对接口编程2、高层模块不应该依赖低层模块。两个都应该依赖抽象。 阅读全文
posted @ 2012-12-28 10:44 践道者 阅读(197) 评论(0) 推荐(0) 编辑
摘要:开闭原则:是说软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。两大特征:对扩展开放、对更改关闭开闭原则为面向对象设计的核心所在,能让设计达到可维护、可扩展、可复用、灵活性好,开发人员应该对程序中呈现出频繁变化的那些部分做出抽象,但要拒绝不成熟的抽象。 阅读全文
posted @ 2012-12-28 10:33 践道者 阅读(234) 评论(0) 推荐(0) 编辑
摘要:单一职责:就一个类而言,应该仅有一个引起它变化的原因。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,如果你能想到多于一个的动机去改变这个类,那么这个类就具有多于一个的职责,就应该考虑职责的分离。 阅读全文
posted @ 2012-12-28 09:31 践道者 阅读(162) 评论(0) 推荐(0) 编辑
摘要:1 #关联关系(association) 2 3 class Climaate(object): 4 pass 5 6 7 class Penguin(Bird): 8 def __init__(self): 9 super(Penguin, self).__init__()10 self._climate = NoneAssociation关联关系表现为变量(has a )。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。关联关系有双向关联和单向关联。双向关联:两个类都知道另一个类的公共... 阅读全文
posted @ 2012-12-27 18:57 践道者 阅读(259) 评论(0) 推荐(0) 编辑
摘要:1 #依赖关系(dependency) 2 class Oxyggen(object): 3 pass 4 5 class Water(object): 6 pass 7 8 9 class Animal(object):10 def metabolism(self, oxygen, water):11 passDependency(依赖关系)表现为函数中的参数(use a)。是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。 阅读全文
posted @ 2012-12-27 18:02 践道者 阅读(395) 评论(0) 推荐(0) 编辑
摘要:#组合关系(composition)class Wing(object): passclass Bird(object): def __init__(self): self.wing = Wing()Composition(组合关系)是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。Bird的生命周期决定了self.wing的生命周期 阅读全文
posted @ 2012-12-27 17:44 践道者 阅读(337) 评论(0) 推荐(0) 编辑
摘要:抽象类(abstract class):声明方法的存在而不去实现 阅读全文
posted @ 2012-12-27 14:10 践道者 阅读(151) 评论(0) 推荐(0) 编辑
摘要:#coding=utf8import stringdef count(numA, numB, operator): try: numberA = string.atof(numA) numberB = string.atof(numB) except: exit("input error,please check it number A :'%s' -- number B:'%s'" % (numA, numB)) op = OperationFactory.createOperate(operator) op.setA(nu... 阅读全文
posted @ 2012-12-27 11:35 践道者 阅读(2839) 评论(0) 推荐(0) 编辑
摘要:考虑这种情况:如果一个线程遇到锁嵌套的情况该怎么办,这个嵌套是指当我一个线程在获取临界资源时,又需要再次获取。 根据这种情况,代码如下:Python代码'''''Createdon2012-9-8@author:walfred@module:thread.ThreadTest6'''importthreadingimporttimecounter=0mutex=threading.Lock()classMyThread(threading.Thread):def__init__(self):threading.Thread.__i 阅读全文
posted @ 2012-12-25 14:32 践道者 阅读(2471) 评论(0) 推荐(0) 编辑
摘要:1、当需要排序的时候,尽量设法使用内建python列表的sort方法2、当需要搜索的时候,尽量设法使用内建的字典DSU模式:通过创建一个辅助列表,将问题转化为列表的排序,从而可以利用默认的快速的sort方法。特性:序列是按照条目的顺序进行比较的。条目顺序是对列表和元组的字符串比较(即字母顺序)规划的归纳。 阅读全文
posted @ 2012-12-20 16:52 践道者 阅读(194) 评论(0) 推荐(0) 编辑
摘要:decode:将其他编码转换成unicode a = 'aabcde'.decode('gb2312') print type(a) b = 'bbddee'.decode('utf8') print type(b) 打印结果:<type 'unicode'><type 'unicode'>encode:将unicode编码转换成其他编码 阅读全文
posted @ 2012-12-13 16:14 践道者 阅读(1745) 评论(0) 推荐(0) 编辑
摘要:做文本处理的时候经常要判断一个文本有没有以一个子串开始,或者结束。Python为此提供了两个函数:S.startswith(prefix[, start[, end]]) -> bool如果字符串S以prefix开始,返回True,否则返回False。start和end是两个可以缺省的参数。分别是开始比较的位置和结束比较的位置。这个函数也可以写成S[start:end].startswith(prefix)。S.endswith(suffix[, start[, end]]) -> bool如果字符串S以suffix结束,返回True,否者返回False。与startswith类似 阅读全文
posted @ 2012-12-11 11:49 践道者 阅读(3473) 评论(0) 推荐(0) 编辑
摘要:/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库(动态链接共享库),作用类似windows里的.dll文件 /sbin 系统管理命令,存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /root 系统管理员的主目录 /mnt 系统提供这个目录是让用户临时挂载其他的文件系统。 /lost+found 该目录平时是空的,系统非正常关机而留下“无家可归”的文件(wi... 阅读全文
posted @ 2012-12-08 16:19 践道者 阅读(164) 评论(0) 推荐(0) 编辑
摘要:Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回: >>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] >>> def f(x) 阅读全文
posted @ 2012-12-08 13:45 践道者 阅读(301) 评论(0) 推荐(0) 编辑
摘要:import urllibinforMation = urllib.urlopen("http://tianya.cn", proxies={'http':'127.0.0.1:8087'})print inforMation.read() 阅读全文
posted @ 2012-12-07 10:37 践道者 阅读(1356) 评论(0) 推荐(0) 编辑
摘要:在工作过程中,在使用全局变量时遇到了些问题,有两个文件,一个是tt.py,代码如下,1 #coding=utf82 3 SUM_COST = 04 5 def cons():6 global SUM_COST #如果要修改全局变量一定要加gloal声明,单纯的读取则不用7 SUM_COST += 18 print SUM_COST另一个是cc.py,代码如下,#coding=utf8from tt import SUM_COST, consprint SUM_COSTcons()print SUM_COST个人理解cc里输出应该分别是0,1但发现输出的都是0,发现调用c... 阅读全文
posted @ 2012-12-06 10:37 践道者 阅读(1103) 评论(0) 推荐(0) 编辑
摘要:class TestClassMethod(object): METHOD = 'method hoho' def __init__(self): self.name = 'leon' def test1(self): print 'test1' print self @classmethod def test2(cls): print cls print 'test2' print TestClassMethod.METHOD print '------------... 阅读全文
posted @ 2012-12-04 22:27 践道者 阅读(51120) 评论(0) 推荐(0) 编辑
摘要:__init__ :创建类时最常用的方法,目的是为了初始化对象,相当于java的构造函数NOTE:一个类的所有数据属性应该在这里赋初始值,以节省后面的调试时间,不必为捕捉因使用未初始化(也就是不存在)的属性而导致产生AttributeError异常__new__:创建类实例,具体用法示例可以看http://www.cnblogs.com/bjdxy/archive/2012/12/04/2801649.html__dict__:存储实例属性及值__class__:生成实例的类__base__:所有基类__name__:类名称__method__:实例具有的方法 ,已经废弃,用dir(实例)__ 阅读全文
posted @ 2012-12-04 19:29 践道者 阅读(608) 评论(0) 推荐(0) 编辑
摘要:1. id():获取的是对象在内存中的地址2. is :比对2个变量的对象引用(对象在内存中的地址,即id() 获得的值)是否相同。如果相同则返回True,否则返回False。换句话说,就是比对2个变量的对象引用是否指向同一个对象。3. ==:比对2个变量指向的对象的内容是否相同。下面通过cmp函数比较两个对象的差异: 1 class MyClass(object): 2 def __init__(self, name): 3 self.name = name 4 5 def __cmp__(self, other): 6 return cmp... 阅读全文
posted @ 2012-12-04 18:50 践道者 阅读(2418) 评论(0) 推荐(0) 编辑
摘要:与__init__一样,每当实例化类时MyClass(*args, **kwargs) ,__new__ 都会默认自动执行MyClass.__new__(*args, **kwargs),如果想改变默认__new__行为,可以对它自定义看一个英寸转换为米例子:1 class inch(float):2 def __new__(cls, arg=0.0):3 return float.__new__(cls, arg * 0.0254)改变了__new__的自定义实例化类inch继承自float如果同时存在__new__ ,__init__则__new__比__init_... 阅读全文
posted @ 2012-12-04 17:07 践道者 阅读(9657) 评论(0) 推荐(2) 编辑
摘要:#coding=utf8class FlyBehavior(object): def fly(self):passclass QuackBehavior(object): def quack(self):passclass FlyWithWings(FlyBehavior): def fly(self): return '我会飞的...'class FlyNoWay(FlyBehavior): def fly(self): return '我没办法飞...'class Quack1(QuackBehavior): def quack(s... 阅读全文
posted @ 2012-12-04 15:42 践道者 阅读(320) 评论(0) 推荐(0) 编辑
摘要:增加用户useradd [options] [username]如,增加python用户并指定用户主目录useradd -d /usr/python -m python如果不指定默认用/home/username 目录增加用户口令passwd username如,root 用户为python用户增加口令passwd python 阅读全文
posted @ 2012-12-04 13:48 践道者 阅读(144) 评论(0) 推荐(0) 编辑
摘要:要掌握py的多线程编程得先了解这个GIL.全局解释器锁(GLOBAL INTERPRETER LOCK):全局解释锁机制保证同一时刻只有一个字节码(bytecode)进程在运行,当前线程想要安全访问对象时,必须先获取GIL,因此,只有获取GIL的线程才有资格去操作py对象或调整py的API函数. 阅读全文
posted @ 2012-12-03 23:23 践道者 阅读(1242) 评论(0) 推荐(0) 编辑
摘要:1、NameError:尝试访问一个未申明的变量>>> vNameError: name 'v' is not defined2、ZeroDivisionError:除数为0>>> v = 1/0ZeroDivisionError: int division or modulo by zero3、SyntaxError:语法错误>>> int intSyntaxError: invalid syntax (<pyshell#14>, line 1)4、IndexError:索引超出范围>>> L 阅读全文
posted @ 2012-12-03 16:58 践道者 阅读(7147) 评论(0) 推荐(0) 编辑
摘要:handler对象有以下几个,常用的为StreamHandler、FileHandler:StreamHandlerFileHandlerNullHandlerWatchedFileHandlerRotatingFilehandlerTimedRotatingFilehandlerSocketHandlerDatagramHandlerSysLoghandlerMemoryhandlerHTTPHandlerHandler的三个基础操作:1、设置输出格式 设置输出格式要用到的对象是Formatter,初始化方法 formater = logging.Formatter(格式) handler. 阅读全文
posted @ 2012-12-03 14:05 践道者 阅读(1668) 评论(0) 推荐(0) 编辑
摘要:import sysis_jython = sys.platform.startswith('java')is_pypy = hasattr(sys, 'pypy_version_info')is_win = (sys.platform == 'win32')is_cygwin = (sys.platform == 'cygwin')is_darwin = (sys.platform == 'darwin') 阅读全文
posted @ 2012-12-03 11:43 践道者 阅读(846) 评论(0) 推荐(0) 编辑
摘要:logger:日志对象,logging模块中最基础的对象,用logging.getLogger(name)方法进行初始化,name可以不填。通常logger的名字我们对应模块名,如聊天模块、数据库模块、验证模块等。logger对象的常用方法有:setLevel:设置日志等级日志等级分别有以下几种: CRITICAL : 'CRITICAL', ERROR : 'ERROR', WARNING : 'WARNING', INFO : 'INFO', DEBUG : 'DEBUG', NOTSET : 'NOT 阅读全文
posted @ 2012-12-03 11:40 践道者 阅读(16765) 评论(0) 推荐(1) 编辑
摘要:在项目中使用到的一个方法 1 def postToGoogle(self, postData): 2 cookieFile = filepath 3 html = StringIO.StringIO() 4 c = pycurl.Curl() 5 c.fp = html 6 c.setopt(pycurl.URL, loginAction_url) #目标url 7 c.setopt(pycurl.WRITEFUNCTION, html.write) 8 c.setopt(p... 阅读全文
posted @ 2012-12-03 11:01 践道者 阅读(714) 评论(0) 推荐(0) 编辑
摘要:lambda 函数好处:1、在不需要再复用的地方用lambda,免去函数名,省去函数定义的过程2、代码更精简示例:g = lambda x : x * 2:左边表示参数,右边表示返回值g(2) # 结果为4示例:过滤少于等于0的数lst = [1,2,3,4,-1,23,0,33]lst2 = filter(lambda n: n>0, lst)print lst2print [i for i in lst if i > 0] #更简单的实现其实能用for in 实现的,比lambda更好,更易读 阅读全文
posted @ 2012-12-01 17:09 践道者 阅读(497) 评论(0) 推荐(0) 编辑
摘要:要理解AOP,必须先理解好AOP的一下几个术语:1、 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式来实现。2、连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。3、 通知(Advice):在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知(通知的类型将在后面部分 阅读全文
posted @ 2012-12-01 15:57 践道者 阅读(890) 评论(0) 推荐(0) 编辑
摘要:好的架构是很多因素的结果,包括以下方面:1、确定进行有意为之的前端设计2、设计者的素质和经验3、在开发过程中,保持清晰的设计观点4、授权团队负责软件的整体设计,而团队也承担起这一责任5、不要害怕改变设计:没有一成不变的事物6、让合适的人加入到团队中7、在合适的时候做出设计决定8、好的项目管理,以及合适的最后期限 阅读全文
posted @ 2012-12-01 15:37 践道者 阅读(140) 评论(0) 推荐(0) 编辑
摘要:基本关注点的决定:1、顶层文件结构2、对事物命名3、“内部”展示的风格4、共用的编码惯例5、选择单元测试框架6、支持性的基础结构(版本控制、合适的构建系统、持续集成系统) 阅读全文
posted @ 2012-12-01 15:28 践道者 阅读(132) 评论(0) 推荐(0) 编辑
摘要:质量控制过程:1、结对编程2、对没有进行结对编程的代码进行代码/设计复审3、对每一段代码进行单元测试以上三个过程确保系统不会有不正确的、不适合的变更,所有不符合软件设计的内容都被拒之门外。ps:对架构之美的翻译感到无语,我严重怀疑译者不是计算机专业出身的,“quality” 不应该翻译成“品质”,应该翻译成“质量”,“质量控制”这是计算机习惯用语。当我看到这一节时觉得很别扭,所以去下载了原版对照,果然,又被国内所谓的砖家糟蹋了一本好书,就像裘宗燕翻译《C++程序设计语言》一样,居然把interface翻译成界面,真令人接受不了~~~~ 阅读全文
posted @ 2012-12-01 15:00 践道者 阅读(142) 评论(0) 推荐(0) 编辑
摘要:相关文件:/etc/bashrc/etc/profile前者是shell级别的,局部的后者是系统级别的,全局的linux 登陆时会先运行/etc/profile设置环境变量的方法:export 命令如,把/pypj 目录增加进$PYTHONPATH1、vi /etc/profile2、export PYTHONPATH=$PYTHONPATH:/pypj重启linux后会把环境变量增加进全局,想立即使用可以用 source /etc/profile 或 . /etc/profile如果要设置当前用户的环境变量可以用编辑 ~/.bash_profile 阅读全文
posted @ 2012-12-01 14:39 践道者 阅读(296) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示