2013年11月7日

Python Cookbook学习记录 ch6_3_2013/11/7

摘要: 6.3限制属性的设置通常情况下,Python允许随意给类和类实例增加属性。但是对于某些特性的类,希望这种自由受到限制一种优雅的实现方法是写一个类和一个简单的自定义元类,再加上一个封装函数。# -*- coding: cp936 -*-def no_new_attributes(wrapped_setattr): """试图添加新属性,报错 但是允许已经存在的属性被随意设置""" def __setattr__(self,name,value): if hasattr(self,name): wrapped_setattr(self,. 阅读全文

posted @ 2013-11-07 22:51 七海之风 阅读(157) 评论(0) 推荐(0)

Python Cookbook学习记录 ch6_2_2013/11/7

摘要: 6.2 定义常量常量是指一旦初始化后就不能修改的固定值。c++中使用const保留字指定常量,而python并没有定义常量的保留字。但是python是一门功能强大的语言,可以自己定义一个常量类来实现常量的功能。# -*- coding: UTF-8 -*-# Filename: const.py# 定义一个常量类实现常量的功能## 该类定义了一个方法__setattr()__, 和一个异常ConstError, ConstError类继承# 自类TypeError. 通过调用类自带的字典__dict__, 判断定义的常量是否包含在字典# 中。如果字典中包含此变量,将抛出异常,否则,给新创建的常 阅读全文

posted @ 2013-11-07 22:06 七海之风 阅读(179) 评论(0) 推荐(0)

2013年11月6日

Python Cookbook学习记录 ch6_1_2013/11/6

摘要: 6.1 温标的转换在开式温度,摄氏度,华氏温度及兰金温度之间做转换将功能封装在如下的类中:# -*- coding: cp936 -*-class Temperature(object): coefficients = {'c':(1.0,0.0,-273.15),'f':(1.8,-273.15,32),'r':(1.8,0.0,0.0)} def __init__ (self,**kwargs): try: name,value = kwargs.popitem() except KeyError: nam... 阅读全文

posted @ 2013-11-06 22:58 七海之风 阅读(245) 评论(0) 推荐(0)

2013年11月3日

Python Cookbook学习记录 ch4_8-16_2013/11/2

摘要: 4.8二维阵列变换讲一个列表的列表,将行换成列,列换成行。可以使用列表推导式>>> arr = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]>>> newarr= [[row[col] for row in arr] for col in range(len(arr[0]))]>>> print newarr[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]还有一种方法,使用内建函数zip>>> print map(list,zip(*arr))[[1, 阅读全文

posted @ 2013-11-03 20:56 七海之风 阅读(213) 评论(0) 推荐(0)

2013年11月2日

Python Cookbook学习记录 ch4_6/7_2013/11/2

摘要: 4.6展开一个嵌套的序列使用了递归生成器,生成器(yield)这个东东的左右是每次产生多个值,函数就被冻结,函数停在那点等待激活,被激活后就从停止的那点开始执行生成器这个东东感觉是只可意会不可言传呀。def list_or_tuple(x): return isinstance(x, (list, tuple))def flatten(sequence, to_expand=list_or_tuple): for item in sequence: if to_expand(item): for subitem in flatten(item, to... 阅读全文

posted @ 2013-11-02 22:15 七海之风 阅读(155) 评论(0) 推荐(0)

Python Cookbook学习记录 ch4_1-5_2013/11/2

摘要: 4.1 对象拷贝和C++一样,python也有深拷贝和浅拷贝前拷贝,如下,虽然生成了一个新的对象,但是对象内部属性和内容依然引用原对象>>> list_of_lists = [['a'],[1,2],['z',23]]>>> copy_lol= copy.copy(list_of_lists)>>> copy_lol[1].append('boo')>>> print list_of_lists,copy_lol[['a'], [1, 2, 'boo& 阅读全文

posted @ 2013-11-02 21:00 七海之风 阅读(148) 评论(0) 推荐(0)

2013年10月30日

Python Cookbook学习记录 ch3_10/11_2013/10/30

摘要: 3.10 反复执行某个命令使用time.sleep方法,以60秒为周期,通过os.system方法来执行命令。sys.argv[0]获取的第一个参数是脚本名称,之后是参数,当参数小于1或者大于2说明参数的个数不对。当参数个数为1时,执行第一种情况,周期默认为60秒,当参数个数为2时,执行第二种情况,时间周期通过脚本自己设定参数import time, os, sysdef main(cmd, inc=60): while True: os.system(cmd) time.sleep(inc)if __name__ == '__main__' : num... 阅读全文

posted @ 2013-10-30 22:56 七海之风 阅读(159) 评论(0) 推荐(0)

Python Cookbook学习记录 ch3_5/8_2013/10/30

摘要: 3.5 计算日期之间的工作日文中使用了dateutil模块,由于deteutil模块属于第三方模块,需要额外安装,所以尝试不适用此模块来实现此功能方法就是使用weekday()方法,由于周六与周日的数值为5和6,不属于这两天的即是工作日:>>> import datetime>>> def workday_between(startday,endday): oneday = datetime.timedelta(days=1) daycheck = endday workday_num = 0 while daycheck != startday: if . 阅读全文

posted @ 2013-10-30 22:25 七海之风 阅读(173) 评论(0) 推荐(0)

2013年10月29日

Python Cookbook学习记录 ch3_3/4_2013/10/29

摘要: 3.3 计算日期之间的时段给定两个日期,需要计算两个日期之间隔了几周感觉没有必要使用文中提到的dateutil模块,自己写了一段:>>> def totaltimer(times): td = datetime.timedelta(0) duration = sum([datetime.timedelta(minutes=x,seconds=y) for x,y in times],td) allseconds = duration.seconds print "The duration is "+str(int(allseconds/60))+" 阅读全文

posted @ 2013-10-29 22:20 七海之风 阅读(155) 评论(0) 推荐(0)

Python Cookbook学习记录 ch3_1/2_2013/10/29

摘要: 3.1计算昨天和明天的日期可以使用datetimie的timedelta方法来表示时间差>>> import datetime>>> today = datetime.date.today()>>> yesteday = today - datetime.timedelta(days=1)>>> tomorrow = today + datetime.timedelta(days=1)>>> print today,yesteday,tomorrow2013-10-29 2013-10-28 2013-1 阅读全文

posted @ 2013-10-29 21:28 七海之风 阅读(152) 评论(0) 推荐(0)

导航