详解Python⾼阶函数
本⽂要点
1.什么是⾼阶函数
2.python中有哪些常⽤的⾼阶函数
什么是⾼阶函数?
在了解什么是⾼阶函数之前,我们来看⼏个⼩例⼦。我们都知道在 python 中⼀切皆对象,函数也不例外。⽐如求绝对值函数abs,我们可以⽤⼀个变量 f 指向 abs 函数,那么当调⽤ f() 的时候可以得到和 abs() ⼀样的效果,这说明变量可以指向函数!
同理我们将 abs 指向另⼀个函数 abs = len,那么 abs 将不再是求绝对值的函数了,abs指向的是求长度的 len 函数。这说明函数名其实就是指向函数的变量!
既然变量可以指向函数,⽽函数的参数可以接收变量。也就是说⼀个函数可以接收另⼀个函数作为参数。下⾯我们来看⼀个DEMO。定义⼀个 add 函数,它接受三个参数 x, y, f,其中 x, y 是数字,f 是⼀个函数。
def add(x, y, f):
return f(x) + f(y)
result = add(-12, -98, abs)
print(result)
输出结果:110
上⾯的 add() 函数就是⼀个⾼阶函数,其实⾼阶函数的概念很简单,能接收函数作参数的函数就是⾼阶函数。
python中常⽤的⾼阶函数
1.map()
map() 是 Python 内置的⾼阶函数,它接收⼀个函数 f 和⼀个 list,并通过把函数 f 依次作⽤在 list 的每个元素上,得到⼀个新的 list 并返回。
例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把 list 的每个元素都作平⽅,就可以⽤map() 函数:
因此,我们只需要传⼊函数f(x)=x * x,就可以利⽤map() 函数完成这个计算:
def add(x, y, f):
return f(x) + f(y)
result = add(-12, -98, abs)
print(result)
输出结果:
字符串函数strip()的作用是[1, 4, 9, 16, 25, 36, 49, 64, 81]
注意:map() 函数不改变原有的 list,⽽是返回⼀个新的 list。
由于 list 包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的list,只要传⼊的函数f可以处理这种数据类型。
reduce() 函数接收的参数和 map() 类似,⼀个函数 f,⼀个 list,但⾏为和 map() 不同,reduce() 传⼊的函数 f 必须接收两个参数,reduce() 对 list 的每个元素反复调⽤函数 f,并返回最终结果值。
下⾯我们来看个 demo:
def prod(x, y):
return x * y
print(reduce(prod, [2, 4, 5, 7, 12]))
输出结果:3360
prod() 函数接收两个参数,返回 x 和 y 的乘积
调⽤ reduce(prod, [2, 4, 5, 7, 12]) 时,reduce 函数将做如下计算:
先计算头两个元素prod(2, 4)结果为:8,
再把计算结果和第3个元素传给 prod(8, 5) 结果为:40,
再把计算结果和第4个元素传给 prod(40, 7) 结果为:280,
再把计算结果和第5个元素传给 prod(280, 12) 结果为:3360,
由于没有更多元素了,最终返回结果:3360
reduce() 还可以接收第 3 个可选参数,作为计算的初始值。如果把初始值设为 100,计算:
reduce(prod, [2, 4, 5, 7, 12], 100)
结果变为:336000,因为第⼀轮的计算是:
计算初始值和第⼀个元素:prod(100, 2),结果为:200。
3.filter()
filter() ⼜可以叫做过滤函数,它接收⼀个函数 f 和⼀个 list,这个函数 f 的作⽤是对每个元素进⾏判断,返回 True 或False,filter() 根据判断结果⾃动过滤掉不符合条件的元素,返回由符合条件元素组成的新 list。
例如,要从⼀个 list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,⾸先,要编写⼀个判断奇数的函数:
def is_odd(x):
if x % 2 == 1:
return x
然后⽤ filter() 过滤掉偶数:
print(list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17])))
结果:[1, 7, 9, 17]
利⽤ filter(),可以完成很多有⽤的功能,例如,删除 None 或者空字符串:
def is_not_empty(s):
return s and len(s.strip()) > 0
print(list(filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])))
以上就是详解Python⾼阶函数的详细内容,更多关于Python⾼阶函数的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论