定义
当一个函数 接收 另一个函数作为参数, 它就是 高阶函数
示例
def func(a, x, y):
a(x, y) # a就是传递的 函数参数f, 执行 a 相当于 执行 f
def f(x, y):
print(x + y)
func(f, 1, 2) # 3, 在函数f执行过程中,输出 3
四大高阶函数
map(func, iterable)
将 可迭代对象 中的每个值 按照 第一个参数( 函数)的 规则 依次 处理, 得到一个 新的 迭代器 对象
def func(alist):
def sqr(x):
return x * x
r = map(sqr, alist) # r是迭代器对象
return list(r) # 将迭代器对象转换为列表
r = func([11, 22, 33, 44, 55])
print(r)
# 定义函数, 接收 列表 作为参数 , 返回一个 包含 绝对值 的新列表
# abs():python内置函数,求一个数的绝对值
def func(alist):
# map 高阶函数需要的参数,不用管是内置的,还是自定义的
r = map(abs, alist)
return list(r)
r = func([-12, 34, 56, -98])
print(r) # [12, 34, 56, 98]
reduce(func, iterable)
将可迭代对象中所有的元素,按照第一个 函数的规则, 连续操作,得到一个 具体的数据
from functools import reduce
# 自定义一个Mysum()函数,接收一个列表作为参数, 返回列表中所有元素之和
def mysum(alist):
def add(x, y):
return x + y
r = reduce(add, alist) # reduce 的结果是一个具体的值
return r
r = mysum([1, 2, 3, 4, 5])
print(r) # 15
filter(func, iterable)
按照第一个函数的返回值对可迭代对象中所有的数据进行过滤,得到一个包含过滤后结果的迭代器对象
# 自定义一个filterNumber()函数,接收一个列表作为参数, 返回一个 包含偶数 的列表
def filterNumber(alist):
def is_even(x):
"""如果函数的返回结果为True, 对应的元素可以得到"""
if x % 2 == 0:
return True
r = filter(is_even, alist) # r也是迭代器对象
return list(r) # 通过类型转换,将迭代器中数据取出
r = filterNumber([1, 2, 3, 4, 5, 6])
print(r) # [2, 4, 6]]
# 自定义一个函数 sevenNumber()函数,接收一个列表作为参数, 返回一个 包含 "逢7必过" 数字的新列表
def sevenNumber(alist):
def f(x):
# 判断为7的倍数,返回True
if x % 7 == 0 or '7' in str(x):
return True
r = filter(f, alist) # r是迭代器对象
return list(r)
r = sevenNumber(range(1, 101))
print(r)
sorted(iterable, key=func, reverse=False)
对列表进行排序,结果是一个排序后的列表,默认升序
alist = [21, 14, -67, -34, 19]
# 按照 数字大小 升序 排序
r = sorted(alist)
print(r) # [-67, -34, 14, 19, 21]
# 按照 数字大小 降序 排序
r = sorted(alist, reverse=True)
print(r) # [21, 19, 14, -34, -67]
# 按照每 个数字的绝对值 升序 排序
r = sorted(alist, key=abs)
print(r) # [14, 19, 21, -34, -67]
# 按照 每个数字的绝对值 降序 排序
r = sorted(alist, key=abs, reverse=True)
print(r) # [-67, -34, 21, 19, 14]
sort()列表的内置方法,不需要接收结果