前言

高阶函数指的是能接收函数作为参数的函数或类;python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率.

map()

map函数可以把一个迭代对象转换成另一个可迭代对象,不过在python3中,结果都是一个map对象,它是一个生成器,可以通过next函数获取它的元素;使用map函数的代码效率比for循环和列表生成式都要高。

参数:

一个函数func,可以是任何函数;

一个或多个可迭代对象,可以是元组、集合、列表等;如果函数有多个参数就传入多个可迭代对象;

# 单个参数
p = map(int,{2,3,4,5}) # 多个参数
def add(x,y,z):
return x+y+z p1 = map(add,[1,2,3],(4,5,6),{7,8,9}) # 注意如果是集合,顺序是不固定的
# 由于是一个map对象,可以转换为list对象
li = list(p1)

reduce()

reduce函数在python3中被放置到functool模块中了,要使用需要引入;

参数:一个函数f,一个可迭代对象,一个可选的初始值;

功能:通过对函数f的反复调用,可以得到最终的积累结果;

def test5(listx):
from functools import reduce
res = reduce(add1,listx)
print(res)
def add1(x,y):
return x+y li = [1,2,4,7,8]
test5(li)

filter()

过滤函数,可以将可迭代对象里的每个元素依次作用于过滤函数,通过返回的false和true对元素进行保留或丢弃;最后返回一个filter对象,该对象是一个生成器;

参数:
func:一个过滤函数,可以是匿名函数;
iterator:一个等待过滤的可迭代对象;
li = [1, 2, 4, 7, 8]
res = filter(lambda x: x % 2 == 1, li)
print(list(res))

max

max内置函数不仅仅是用来获取一个容器中的算术最大值,事实上它可以自定义比较的规则。

# 参数:
key:比较的规则
values:比较值
x = max(['name','age','you'],key=lambda x:len(x))
print(x) # name
y = max('name','age','you',key=lambda x:len(x))
print(y) # name

min

用来获取一个容器中的最小值,用法参考max.

sorted

sorted函数用来对容器里的元素进行重新排序并返回一个新的容器,支持自定义比较规则。

# 参数
key:比较规则;
reverse:排列规则,默认False,升序排列
values:第一个参数必须是一个容器
x = sorted(['name','age','you'],key=lambda x:len(x),reverse=False)
print(x)

partial

偏函数partial是一个类,有时候一些函数在使用的时候要求不能有参数或者为了少传递参数,典型的如flask框架中的session和g等代理对象的创建,这时可以将函数转化成偏函数;它的原理是将函数的对象和参数作为参数生成一个partial对象,调用时传入的新参数和对象存储的参数合并后再调用原来的函数,即将传参分成两步完成。

from functools import partial, partialmethod
new_func = partial(get_values, *(2,3)) # 第一步先传两个参数,注意需要解包
print(new_func(4)) # 再传最后一个参数

总结

  • partial类的作用就是将一个函数执行拆成两步:先传参后执行或先传部分参,后再传参调用执行;

  • sorted方法对容器元素按照指定的规则排序;

  • max和min方法按照指定的比较规则选出容器的最大最小值;

  • filter类对容器元素进行过滤;

  • reduce方法对元素迭代积累;

  • map类按照自定规则将容器里的所有元素转化成另外的元素值得到一个新的容器;

参考

最新文章

  1. css预处理器sass使用教程(多图预警)
  2. mysql 分页查询
  3. solr 添加索引
  4. KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]
  5. soapUI测试webservice(参数为xml格式的处理方式)
  6. Ubuntu下安装eclipse
  7. Oracle EBS R12 电子技术参考手册 - eTRM (电子文档)
  8. maven常见问题问答
  9. nandflash学习1——导致nandflash反转的原因【转】
  10. 嵌入式ARM-Linux开发工具下载地址合集
  11. FragmentActivity
  12. 剑指Offer_4_二维数组中的查找
  13. File类中的list和listFiles方法
  14. Vivado SDK ,调用math.h函数的时候出现 undefined reference to `xxx' ,解决方案
  15. web字体分析
  16. Unty中通过镜像优化HDRI全景图体积
  17. (并发编程)全局解释器锁(GIL)-----有了GIL不用给线程加锁了?
  18. Codeforces 939E - Maximize!
  19. mysqldump: Got error: 1066: Not unique table/alias
  20. ArcGIS案例学习笔记-批量裁剪地理模型

热门文章

  1. ie浏览器升级的正确姿势
  2. 【JavaScript&jQuery】5秒跳转
  3. Docker学习笔记五:Docker生成jenkins容器,支持Java Web项目持续集成、持续部署
  4. 【BZOJ4709】柠檬(动态规划,单调栈)
  5. 测试开发面试的Linux面试题总结之二:常用命令
  6. C++11——引入的新关键字
  7. NOIP2017结束了
  8. 【学习笔记】ac自动机&fail树
  9. 女神(goddess)——组合数学
  10. 【bzoj4182】shopping