前言

高阶函数指的是能接收函数作为参数的函数或类;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类按照自定规则将容器里的所有元素转化成另外的元素值得到一个新的容器;

参考

python基础之常用的高阶函数的更多相关文章

  1. python 常用的高阶函数

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...

  2. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  3. python—lambda函数,三个常用的高阶函数

    """lambda 参数列表 : 返回值lambda 参数形式: 1.无参数:lambda:100 2.一个参数:lambda a: a 3.默认参数:lambda a, ...

  4. python六十四课——高阶函数练习题(二)

    总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...

  5. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  6. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  7. Python嵌套、递归、高阶函数

    一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...

  8. Learning Python 012 函数式编程 1 高阶函数

    Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...

  9. python六十二课——高阶函数之filter

    高阶函数之:filter函数:过滤数据的,最终返回一个惰性序列对象(filter对象,迭代器对象)解释:filter的意思:在计算机领域中我们都称为过滤器格式:filter(fn,lsd):参数和ma ...

随机推荐

  1. es6中对象转数组,转map

    //对象转数组let array = Object.keys(userPermission).map(key=> userPermission[key]) console.log(array) ...

  2. ZOJ3591_Nim

    题目的意思是给你n个ai,有多少种不同的连续段使得用该段数中所有的数字玩Nim游戏的先手必胜. 首先根据博弈论的知识,我们知道,要使先手必胜,那么只要保证所有的数的异或值不为0就可以了. 这个题目,给 ...

  3. BZOJ3560 DZY Loves Math V(欧拉函数)

    对每个质因子分开计算再乘起来.使用类似生成函数的做法就很容易统计了. #include<iostream> #include<cstdio> #include<cmath ...

  4. Django获取多个数据及文件上传

    1. 选择性别: 1)更新login.html模板 2)views.py中获取客户端提交的数据 3)当选择性别为“男”后,后台得到了gender=1. 2.选择爱好,可以多选,所以后台会获得多个数据. ...

  5. 洛谷P4608 [FJOI2016]所有公共子序列问题 【序列自动机 + dp + 高精】

    题目链接 洛谷P4608 题解 建个序列自动机后 第一问暴搜 第二问dp + 高精 设\(f[i][j]\)为两个序列自动机分别走到\(i\)和\(j\)节点的方案数,答案就是\(f[0][0]\) ...

  6. CDOJ--1237

    原体连接:http://acm.uestc.edu.cn/problem.php?pid=1237 分析:质因子单增:在寻找下一个质因子时,从前一个开始. #include<iostream&g ...

  7. 树莓派更改vnc分辨率

    参考链接:https://raspberrypi.stackexchange.com/questions/56421/how-to-increase-resolution-on-latest-rasp ...

  8. jdk1.5后枚举类的定义规则

    转: http://blog.csdn.net/willcold/article/details/12844487  JDK1.5 新增的enum关键字用于定义枚举类             枚举类也 ...

  9. mesos+marathon+zookeeper+docker

    http://mesosphere.com/docs/mesosphere/getting-started/single-node-install/ mesos-master --zk=zk://lo ...

  10. java-压缩文件成zip文件(多文件/单文件/多目录/单目录/无目录),用于下载

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6424788.html 上代码: pac ...