谈谈Python中那些高阶函数

前言

在编程语言中,高阶函数指的是接受函数作为输入或输出的函数。简而言之就是将一个函数作为参数传到另一个函数A中,那么这个函数A就是高阶函数。(可接收其他函数作为参数的函数称为高阶函数)

一、map()函数

python中的map()函数是一个内置的高阶函数,一般用法是map(function, iterable)。需要传入一个函数,这个函数可以是内置的,也可以是自己定义,也可以是匿名函数即lambda。第二个参数是一个可迭代对象,如列表、字典字符串等。map函数返回的是一个map对象,也是一个可迭代对象,可以利用for循环迭代查看元素,也可以尝试 list() 将其转为列表对象操作、map形式:

map(function, iterable, …)

例:

def add(x):
    return  x+x
print(map(add,[1,2,3]))

print(list(map(add,[1,2,3])))

输出结果:
python

二、reduce()函数

reduce用于对可迭代对象中的元素进行累积操作,reduce接受两个参数,一个是函数f(x, y) 参数(该函数必须有两个参数),另一个是可迭代对象。reduce行为是先将可迭代对象的前两个元素传入 f(x, y) 中,然后不断将 f(x, y) 的返回值再次和下一个迭代对象传入f(x, y),直到迭代完迭代对象中的元素,并返回最终的 f(x, y) 的返回值。reduce形式:

reduce(function, iterable[, initializer])

例:

from functools import reduce
def prod(x,y):
    return x*y
print(reduce(prod,[2,4,5,7,12]))

print(reduce(prod,[2,4,5,7,12],100))

输出结果:
python

三、filter()函数

filter用于过滤筛选可迭代对象中的元素,如果符合条件则返回对应的元素序列(类型为filter),filter接受两个参数,一个是函数用于筛选元素,返回值为True或Flase,另一个是可迭代对象。

例:

import math
def is_sqr(x):
    return math.sqrt(x)==int(math.sqrt(x))

print(list(filter(is_sqr,range(1,101))))

输出结果:
python

四、sorted()函数

对所有可迭代的对象进行排序操作。

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

sorted(iterable,key=None,reverse=False)

iterable – 可迭代对象。

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回重新排序的列表:

print(sorted([5,2,3,1,4]))
#[1, 2, 3, 4, 5]
print(sorted({1:'D',2:'B',3:'b',4:'E',5:'A'}))
#[1, 2, 3, 4, 5]

利用key进行倒序排序:

example_list=[1,4,7,2,8,5,6,7]
result_list=sorted(example_list,key=lambda  x:x*-1)
print(result_list)
#输出结果   [8, 7, 7, 6, 5, 4, 2, 1]

要进行反向排序,也可以通过传入第三个参数 reverse=True:

example_list=[1,4,7,2,8,5,6,7]
print(sorted(example_list,reverse=True))
#输出结果   [8, 7, 7, 6, 5, 4, 2, 1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值