python 特殊函数的用法

来源:互联网 发布:vb工程资源管理器窗口 编辑:程序博客网 时间:2024/05/20 12:49
1.可变长度的参数:   e.g:    def tupleVarAgr(agr1,arg2='defultB',*theRest):           print 'agr1:',arg1           print 'agr2:',agr2           for each in the theRest:                   print 'anther arg:',eachXthArg    >>>tupleVarAgr('abc')          agr1:abc          agr2:defaultB    >>>tupleVarAgr('abc',123,'xy','wym')          agr1:abc          agr2:123          anther arg:xy           anther arg:wym2,匿名函数与lambdalambda [agr1 [,agr2,agr3....agrN]]:expression  e.g:(1) def add(x,y):return x+y <=> lambda x,y:x+y(2)def usuallyAdd2(x,y=2):return x+y <=> lambda x,y=2:x+y3.内置函数apply,filter(),map(),reduce()A,filter()#返回满足函数条件的序列    e.g:    def odd(N):           return N%2    allNums=[]    for eachnum in range(9):             allNums.append(eachnum)    print filter(odd,allNums)#保留0-9的奇数序列B,map()   e.g:   >>>map((lambda x:x+2),[0,1,2,3,4,5])   [2,3,4,5,6,7]   >>>map(lambda x,y:x+y,[1,3,5],[2,4,6])   [3,7,11]   >>>map(lambda x,y:(x+y,x-y),[1,3,5],[2,4,6])   [(3,-1),(7,-1),(11,-1)]   >>>map(None,[1,3],[2,4])<=>zip([1,3],[2,4])   [(1,2),(3,4)]C,reduce()   reduce(func,[1,2,3])<=>func(func(1,2),3)   e.g:    def my Sum(x,y):return x+y    allNums=range(5) #[0,1,2,4,5]    total=0    for eachNum in allNums:             total=mySun(total,eachNum)    the total is:10   以上代码用reduce实现:   print 'the total is:',reduce((lambda x,y:x+y),range(5))   the total is:10   操作实际如下:((((0+1)+2)+3)+4)=>10

定义:zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:>>> a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b)[(1, 4), (2, 5), (3, 6)]>>> zip(a,c)[(1, 4), (2, 5), (3, 6)]>>> zip(*zipped)[(1, 2, 3), (4, 5, 6)]对于这个并不是很常用函数,下面举几个例子说明它的用法:* 二维矩阵变换(矩阵的行列互换)比如我们有一个由列表描述的二维矩阵a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]通过python列表推导的方法,我们也能轻易完成这个任务print [ [row[col] for row in a] for col in range(len(a[0]))][[1, 4, 7], [2, 5, 8], [3, 6, 9]]另外一种让人困惑的方法就是利用zip函数:>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> zip(*a)[(1, 4, 7), (2, 5, 8), (3, 6, 9)]>>> map(list,zip(*a))[[1, 4, 7], [2, 5, 8], [3, 6, 9]] zip函数接受任意多个序列作为参数,将所有序列按相同的索引组合成一个元素是各个序列合并成的tuple的新序列,新的序列的长度以参数中最短的序列为准。另外(*)操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple。①tuple的新序列>>>>x=[1,2,3],y=['a','b','c']>>>zip(x,y)[(1,'a'),(2,'b'),(3,'c')]②新的序列的长度以参数中最短的序列为准.>>>>x=[1,2],y=['a','b','c']>>>zip(x,y)[(1,'a'),(2,'b')]③(*)操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple。>>>>x=[1,2,3],y=['a','b','c']>>>>zip(*zip(x,y))[(1,2,3),('a','b','c')]

原创粉丝点击