当前位置: 首页 > 后端技术 > Python

这些Python高阶函数你知道怎么用吗?

时间:2023-03-26 15:58:41 Python

1。map()函数map()函数接收两个参数,一个是函数,一个是Iterable。map依次将传入函数应用于序列的每个元素,并将结果作为新的Iterator返回。deff(x):returnx*xL=map(f,[1,2,3,4,5])list(L)[1,4,9,16,25]2.reduce()函数reduceAfunction作用于一个序列[x1,x2,x3,...],这个函数必须接收两个参数,reduce继续与序列的下一个元素累加结果。效果是:reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)fromfunctoolsimportreducedeffn(x,y):returnx*10+yreduce(fn,[1,2,3,4,5])12345map和reduce一起使用将str转换为intfunctionfromfunctoolsimportreduceDIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}defstr2int(s):deffn(x,y):returnx*10+ydefchar2num(s):returnDIGITS[s]returnreduce(fn,map(char2num,s))filter()函数用于过滤序列filter()也接受一个函数和一个序列。与map()不同的是,filter()将传入的函数依次应用到每个元素上,然后根据返回值是True还是False来决定保留还是丢弃该元素。注意filter()函数返回的是一个Iterator,它是一个惰性序列,所以要强制filter()完成计算结果,需要使用list()函数获取所有结果并返回列表。从序列中删除空字符串:defnot_empty(s):returnsands.strip()list(filter(not_empty,['a','','b',None,'']))结果:['a','b','c']使用filter找素数首先构造一个从3开始的奇数序列def_old_iter():n=1whileTrue:n=n+2yieldn然后定义一个filter函数:def_not_divisible(n):returnlambdax:x%n>0最后,定义一个连续返回下一个质数的生成器:defprimes():yield2it=_odd_iter()#initialsequencewhileTrue:n=next(it)#返回序列的第一个数yieldnit=filter(_not_divisible(n),it)#构造一个新序列并打印1000以内的素数:forninprimes():ifn<1000:print(n)else:break3.sorted函数Python内置的sorted()函数可以对列表进行排序sorted([36,5,-12,9,-21])[-21,-12,5,9,36]sorted()函数也是一个高阶函数。它还可以接收一个键函数来实现自定义排序sorted([36,5,-12,9,-21],key=abs)[5,9,-12,-21,36]sorted(['bob','about','Zoo','Credit'])['Credit','Zoo','about','bob']默认情况下,对于字符字符串的排序是按照ASCII的大小进行比较.由于'Z'<'a',因此大写字母Z会排在小在字母前面写一个sorted(['bob','about','Zoo','Credit'],key=str.lower)忽略大小写排序['about','bob','Credit','Zoo']进行反向排序,不改变key函数,可以传入第三个参数reverse=Truesorted(['bob','about','Zoo','Credit'],key=str.lower,reverse=True)['Zoo','Credit','bob','about']