常见高阶函数使用

Python中如果将一个函数名传送给另一个函数作为形参,那么就成这个函数为高阶函数

简单例子:

f = abs # 这就表示Python中函数名是可以传送给变量的
print(f(-9))

def add(a,b,f): return f(a)+f(b) print(add(1,2,abs)) # 如果将函数名传入为另一个函数参数,这样的叫做高阶函数

常见高阶函数使用

1. map函数

  • map函数:map函数是相当于通过一个函数将输入变量一一映射(通过某类函数)进行输出。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
def fuc(x):
    return x*x r = map(fuc,[1,2,3]) print(list(r))

为什么需要map这样的函数了? 因为map函数第一个参数是作用的函数,我们可以通过这个函数清楚的知道这个函数具体的作用是什么,起到了见名知意的作用。

>>> map(str,[1,2,3,4,5]) <map object at 0x00000219AAD1C5F8> >>> list(map(str,[1,2,3,4,5])) ['1', '2', '3', '4', '5']

2. reduce函数:

  • reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
def add(a,b): return a+b print(reduce(add,[1,2,3,4])) # 使用redunce这里相当于是sum def add1(a,b): return 10 * a + b print(reduce(add1,[1,2,3,4])) # 这个例子相当于是进行迭代操作,一次一次进行迭代
>>> from functools import reduce
>>> def fn(x, y):
        return x * 10 + y
...
>>> def char2num(s):...
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} ... return digits[s] ... >>> reduce(fn, map(char2num, '13579')) 13579

3. filter()函数

  • Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。所以filter和map区别一点就是filter就像滤波器一样会保留或者丢掉一些元素,但是map是不会丢弃元素的,只是会作用在一些元素上面的。
def is_odd(num):
#if(num%2==1): # return num return num % 2 == 1 # 这句话的含义就是先进行判断然后进行合适数字的输出 print(list(filter(is_odd, [1, 2, 3, 4, 5, 6]))) # filter和map类似的,输出的也是一个惰性序列,需要通过List强制进行转换

* 注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。*

4. sorted()排序函数

  • sort函数直接可以作用于list中,表示对其进行排序,sorted函数也是一个高阶函数,里面也是可以传入其他的参数
print(sorted([1, 2, 49, -11])) # 默认是从小到大进行排序 print(sorted([1, 2, 49, -11], reverse=True)) # 通过reverse属性,表示我们使用反向排序,也就是从大到小进行排序 print(sorted([1, 2, 49, -11], key=abs)www.yigouyule2.cn) # 按照绝对值从小到大进行排序 print(sorted(['abs',www.120xh.cn   'Ab', 'ZO'])www.taohuayuan178.com) # 这个sorted对字符串进行排序的时候是根据首字符的ASCII进行排序的 print(sorted(['abs', 'Ab',www.dongfan178.com 'ZO'], key=str.lower)) # 这个表示按照字符串首字母进行排序,但是这里的话我们忽略大小写

5. 返回函数

一个函数的返回值不仅仅是一个数,也还可以是一个函数,这样的高阶函数称为返回函数

def laze_sum(*args):
    def sum_up(): # 这个是通过可变参数进行求和运算的 sumnum = 0 for n in args: sumnum = sumnum + n return sumnum return sum_up f1 = laze_sum(1, 2, 3) f2 = laze_sum(1, 2, 3) print(f1) #www.huachengj1980.com/ <function laze_sum.<locals>.sum_up at 0x0000023C5DED3D90>输出这样一个数 if f1 == f2: print('True') else: print('no')

6. 匿名函数

  • 在Python中有时候我们不需要显示的调用函数,或者说我们仅仅想要产生一个可以作用的函数,这时候我们就可以使用匿名函数了,这样我们就可以匿名函数输出简单的函数,而不需要用户自己在定义其他函数了,简化了代码,使用lambda关键字:lambda紧跟着的是函数的形参,然后是冒号:,最后是输出变量。
print(list(map(lambda x: x*x, [1, 2, 3, 4, 5]))) print(list(map(lambda x: x*x*x, [1, 2, 3, 4, 5]))) # 使用lambda是不会发生重名的错误的

猜你喜欢

转载自www.cnblogs.com/qwangxiao/p/9103235.html