Python---7.高阶函数(函数工具)

来源:互联网 发布:网络用语马克啥意思 编辑:程序博客网 时间:2024/06/05 18:41

一 map(function, Iterable) 映射操作到可迭代对象

map()函数接收两个参数,一个是函数,另一个是可迭代的对象(如果不理解什么是可迭代对象,可以先理解为列表元组等这类可以用for in 遍历的对象),map函数将参数函数依次作用于可迭代对象的每一个元素,并将结果作为一个新的可迭代对象进行返回。

例:将列表中的成绩每个都加两分

>>>score = [45, 71, 78, 88, 60, 92]>>>def func(x):...    x = x + 2...    return x>>>map(func, score)  <map object at 0x000001A28166EDA0>         #返回一个可迭代的map对象>>>results = list(map(func, score))     #将可迭代的map对象装换成列表>>>results[47, 73, 80, 90, 62, 94]          #可知每个元素都加了2

当然,像例中的func()主体为单一表达式的简单函数,可以用lambda表达式替代,能有效减少代码量

>>>score = [45, 71, 78, 88, 60, 92]>>>results = list(map(lambda x : x+2, score))>>>results[47, 73, 80, 90, 62, 94]>>>name = ['Tom', 'Tony', 'Amy']              #将字符串变为大写>>>print(list(map(lambda s:s.upper(), name)))['TOM', 'TONY', 'AMY']

二 filter() 从可迭代对象中选择过滤项

filter()函数主要用于过滤函数作用于可迭代对象后返回值为True的元素,并返回一个可迭代对象

#过滤成绩中小于60的成绩>>>score = [44, 55, 66, 77]>>>l = filter(lambda x: x>=60, score)>>>l<filter object at 0x000001A28166E400>>>>print(list(l))[66, 77]

三 functools.reduce()合并迭代项

假设有一个列表l = [1, 2, 3, 4, 5, 6, 7], 现在想要计算l元素的和,利用reduce()函数可以这样写:

>>>import functools>>>l = [1, 2, 3, 4, 5, 6, 7]>>>sum = functools.reduce(lambda x, y: x + y, l)>>>sum28

也许你会说用sum(l)岂不是更方便,是的,但是如果是要计算元素的乘积,使用reduce()就非常容易

import functoolss = functools.reduce(lambda x, y:x*y, l)print(s)###################运行结果:5040——————————————————————————————————————#连接字符串列表中的没个字符元素l2 = ['a', 'b', 'c', 'd']str1 = functools.reduce(lambda x, y:x+y, l2)print(str1)###运行结果'abcd'

四 sorted() 自定义排序函数

(这个函数是从廖雪峰老师的网站上看的)

Python内置的sorted()函数就可以对list进行排序:

>>> sorted([36, 5, -12, 9, -21])[-21, -12, 5, 9, 36]

sorted()函数也是一个高阶函数,它还可以接收一个参数key函数来实现自定义的排序,例如按绝对值大小排序:

sorted([36, 5, -12, 9, -21], key=abs)[5, 9, -12, -21, 36]

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经过key=abs处理过的list:

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经key=abs处理过的list:

list = [36, 5, -12, 9, -21]keys = [36, 5,  12, 9,  21]

然后sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:

keys排序结果 => [5, 9,  12,  21, 36]                |  |    |    |   |最终结果     => [5, 9, -12, -21, 36]

传入key函数,可实现忽略大小写的排序:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)['about', 'bob', 'Credit', 'Zoo']

如果妥善使用高阶函数和lambda表达式,可以一定程度上节省我们的工作量。

小结

  • 以上是自己学python时的一些笔记,感觉写在本上不方便,正好利用闲暇时间腾到csdn上。
  • 自己的总结,如果有那些地方不合理或有有误,请指正。
  • 知识体系图:[Python3基础
原创粉丝点击