高阶函数 将函数作为参数传入,这样的函数称为高阶函数。函数式编程就是指这种高度抽象的编程范式。 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。如下所示:1deffun0(x,y,fun):2returnfun(x)fun(y)3print(fun0(9,10,abs)) 1。高阶函数之map map(fun,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回。1list1〔0,1,2,3,4,5,6,7,8,9〕23listresult〔〕4foriinlist1:5listresult。append(iii)6print(listresult)78defcube(x):求立方9returnxxx10print(list(map(cube,list1)))111213list2〔10,11,12,13,14,15,16,17,18,19〕14defmulti(x,y):15returnxy1617map接收两个list,可用于两个列表的对应索引数据进行操作18print(list(map(multi,list1,list2))) 2。高阶函数之匿名函数 定义一个匿名函数并调用,定义格式如lambdaarg1,arg2:表达式1flambdax,y:xy2print(f(10,20))34不需要显式地定义函数,直接传入匿名函数更方便5print(list(map(lambdax:xxx,list1))) 3。高阶函数之reduce reduce把一个函数作用在一个序列〔x1,x2,x3,〕上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。1fromfunctoolsimportreduce2list1〔1,3,5,7,9〕如何让列表里面的值变成一个数字13579输出3deffun(x,y):4returnx10y5print(reduce(fun,list1))6print(reduce(lambdax,y:x10y,list1))利用lambda来实现78print(reduce(lambdax,y:xy,range(1,101)))从12。。。99100的总和 4。高阶函数之filter filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。1deffun2(x):2returnx203list2〔1,2,3,4,5,6,7,8,9〕4print(list(filter(fun2,list2)))56print(list(filter(fun2,range(1,101))))输出1到100的偶数7print(list(filter(lambdax:x20,list2)))利用lambda来实现89获取非空字符串函数10deffun3():11list1〔tony,is,good,man,,hello,〕12forelinlist1:13if(elandel。strip()):14print(el)15fun3()1617使用filter实现fun3的功能18defisnotnull(str1):19returnstr1andstr1。strip()20list3〔tony,is,good,man,,hello,〕21print(list(filter(isnotnull,list3))) 5。高阶函数之装饰器1importtime2defwastetime(func):用于计算函数执行的耗时3deffunction(args,kwargs):4starttimetime。time()5resultfunc(args,kwargs)6endtimetime。time()7spendendtimestarttime8print(函数s总共耗时。3f秒:(func。name,spend))9returnresult10returnfunction1112wastetime13defabc():14print(aaa)15abc()1617defgetlog(func):能装饰的方法添加日志输出18importtime19defwrapper(args,kw):20print(str(time。asctime())calls():func。name)21returnfunc(args,kw)22returnwrapper2324getlog25defabd():26print(bbb)27abd() 6。高阶函数之retrunfunction(返回函数)1wastetime2defgetdict(kwargs):3defgetjson():4jsons5forkey,valueinkwargs。items():6jsonskeystr(value)7returnjsons8returngetjson91011print(getdict(nametony,age33))12fgetdict(nametony,age33)13print(f())14print(getdict(nametony,age33)()) 7。高阶函数之sorted排序函数1numlist〔34,55,2,3,444,500〕2print(sorted(numlist))默认升序3print(sorted(numlist,reverseTrue))reverseTrue表示降序45对字符串ASCIIA65a97进行排序6strlist〔ac,aa,AB,d,c〕7print(sorted(strlist))8print(sorted(strlist,reverseTrue))910用key来接收指定函数来进行自定义排序11strlist〔ac,aa,AB,d,c〕12print(sorted(strlist,keystr。lower))不考虑大小写1314numlist〔34,55,2,3,444,500,599,222〕15print(sorted(numlist,keyabs))用绝对值进行排序1617classTester:18definit(self,age,name):19self。ageage20self。namename2122t1Tester(10,tony)23t2Tester(20,jack)24t3Tester(30,tom)2526resultlist(sorted(〔t1,t2,t3〕,keylambdax:x。age))针对对象实例进行排序,指定了年龄27fortestinresult:28print(test。name,test。age) 8。高阶函数之闭包 闭包的定义?闭包本质上就是一个函数 如何创建闭包?函数要嵌套(有内外部函数)内部函数使用外部函数的变量外部函数返回内部函数的名称 如何使用闭包?典型的使用场景是装饰器的使用。 global与nonlocal的区别:global可以改变全局变量,同时可以定义新的全局变量;nonlocal只能改变外层函数变量,不能定义新的外层函数变量,并且nonlocal也不能改变全局变量。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中;nonlocal关键字只能用于嵌套函数中,并且外层函数中必须定义了相应的局部变量,否则会发生错误。 简单的使用如下:1defoutFun(arg1):2definFun(arg2):3nonlocalarg1nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。4arg12005returnarg1arg26returninFun7infunoutFun(100)调用外部函数,传入参数,返回是内部函数8resultinfun(300)调用内部函数,传入参数9print(theresultis:,result)1011使用闭包求给function计算耗时(上面的内容已经提到)代码如下:12importtime13defwastetime(func):用于计算函数执行的耗时14deffunction(args,kwargs):15starttimetime。time()16resultfunc(args,kwargs)17endtimetime。time()18spendendtimestarttime19print(函数s总共耗时。3f秒:(func。name,spend))20returnresult21returnfunction 9。高阶函数之偏函数 偏函数主要辅助原函数,作用其实和原函数差不多,不同的是,我们要多次调用原函数的时候,有些参数,我们需要多次手动的去提供值。 而偏函数便可简化这些操作,减少函数调用,主要是将一个或多个参数预先赋值,以便函数能用更少的参数进行调用。 我们再来看一下偏函数的定义: 类funcfunctools。partial(func,args,keywords) 我们可以看到,partial一定接受三个参数,从之前的例子,我们也能大概知道这三个参数的作用。简单介绍下:func:需要被扩展的函数,返回的函数其实是一个类func的函数args:需要被固定的位置参数kwargs:需要被固定的关键字参数1defadd(args,kwargs):2forninargs:打印位置参数3print(n)4print(20)5fork,vinkwargs。items():打印关键字参数6print(s:s(k,v))78普通调用9add(1,2,3,v110,v220)1011偏函数调用12fromfunctoolsimportpartial13addfunpartial(add,100,k1200,k2300)14addfun(1,2,3,v110,v220) 总结 本文是对Python高阶函数相关知识的分享,主题内容总结如下:初识高阶函数高阶函数之map高阶函数之匿名函数高阶函数之reduce高阶函数之filter高阶函数之装饰器高阶函数之retrunfunction(返回函数)高阶函数之sorted排序函数高阶函数之闭包高阶函数之偏函数