[python]学习Django中的python知识拾遗

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)

map(function,sequence)
把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
原文地址:https://www.cnblogs.com/iyjhabc/p/3859847.html