Python高阶函数简单使用总结

高阶函数

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)) # 按照绝对值从小到大进行排序

print(sorted(['abs', 'Ab', 'ZO'])) # 这个sorted对字符串进行排序的时候是根据首字符的ASCII进行排序的
print(sorted(['abs', 'Ab', '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)     # <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是不会发生重名的错误的

参考博客:

  1. 廖雪峰的python教程
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值