1、使用正则表达式进行URL匹配
urlpatterns = patterns('', # ... (r'^time/plus/d+/$', hours_ahead), # ... )
(1)使用r代表字符串是原始字符串,表示python不会对立面的反斜杠转义符进行处理,使用正则表达式一般使用原始字符串。
(2)使用d+表示匹配1个或者多个数字,如果限定只能使用两个数字,则d{1,2}。
(3)如果要把正则表达式的某个数作为参数,则用小括号包起来,如(r'^time/plus/(d{1,2})/$', hours_ahead)。
2、使用timedelta来计算时间差
dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
timedelta代表一个时间差,如果用两个datetime对象相减也可以获得一个timedelta。除此之外,可以使用hours,minutes,seconds,weeks等参数来自定义时间差。把datetime对象加减一个timedelta就可以获得一个时间点之前或者之后特定时间差的时间点了。
3、异常处理格式
try: offset = int(offset) except ValueError: raise Http404()
使用try,except xxx: raise xxx()的格式进行异常处理。
4、每一个类可以定义一个__unicode__方法,告知如何使用unicode的方式打印此类,如
def __unicode__(self): return self.name
5、把列表中所有对象的同一属性存放于一个列表中
class sss: n=0 l=[a,b,c] >>> r=[i.n for i in l] >>> r [2, 4, 3]
6、结果批量生成列表的方式(lamdba表达式、map、reduce)
把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。
如果function有两个参数,即map(function,sequence1,sequence2)。
>>> squr = lambda x:x**2 >>> map(squr,[1,3,4,5,6,8]) [1, 9, 16, 25, 36, 64]
reduce(function,sequence)
function接收的参数个数只能为2!
先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给
function,然后只返回一个结果。
例子:
求1到10的累加
reduce(lambda x,y:x+y,range(1,11))
返回值是55。
filter(function,sequence)
function的返回值只能是True或False!
把sequence中的值逐个当参数传给function,如果function(x)的返回值是True,就把x加到filter的返回值里面。一般来说filter的返回值是list,特殊情况如sequence是string或tuple,则返回值按照sequence的类型。
例子:
找出1到10之间的奇数
filter(lambda x:x%2!=0,range(1,11))
返回值
[1,3,5,7,9]
zip,同时处理多个列表
>>> a=[1,2,3] >>> b=[5,6,7] >>> for x,y in zip(a,b): print x+y 6 8 10