1. 高阶函数
高阶函数就是一个函数可以用来接收另一个函数作为参数,
这样的函数叫做高阶函数。
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result)
def add_num(a, b, f):
return f(a) + f(b)
result = add_num(-1, 2, abs)
print(result)
1.1 内置高阶函数:map()
map函数:根据提供的函数对指定的序列做映射。
将传入的函数变量func作用到iterables变量的每个元素中,
并将结果组成新的迭代器返回。
参数说明:
function: 一个函数名,可以是Python内置的,也可以是自定义的。
iterables: 一个可以迭代的对象,例如元组、列表、字符串。
返回值:map的返回结果是一个object对象。
# 1. 准备列表数据
list_01 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 2. 准备2次方计算的函数
def f(x):
return x * x
# 3. 调用map
result = map(f, list_01)
# 4. 验收结果
print(list(result))
运行结果:
1.2 内置高阶函数 reduce()
reduce()函数:实现对func计算的结果继续和序列的下一个元素做累积计算。
用传给reduce中的函数 func()(必须是一个二元操作函数)
先对集合中的第1,2个数据进行操作,
得到的结果再与第三个数据用func()函数运算。
参数说明:
function:函数,有2个参数。
iterable: 一个可以迭代的对象,例如元组、列表、字符串。
initializer:可选,初始参数。
示例代码:
# 导入模块
from functools import reduce
# 定义函数功能
def myAdd(x, y):
return x + y
# 调用reduce,作用:功能函数计算的结果和序列的下一个数据做累计计算
add = reduce(myAdd, [1, 2, 3, 4])
print(add)
运行结果:
上述例子可以用匿名函数表示为:
# 导入模块
from functools import reduce
add = reduce(lambda x, y: x + y, [1, 2, 3, 4])
print(add)
运行结果:
1.3 内置高阶函数: filter()
fliter()函数:对指定的序列执行过滤操作。
其接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,
返回True或 False,filter()根据判断结果自动过滤掉不符合条件的元素。
参数说明:
function: 属于判断函数,该函数为函数的名称或者None。
该参数如果使function,他只能接收一个参数,而且返回值是布尔值。
iterable: 一个可以迭代的对象,例如元组、列表、字符串。
返回值:filter返回结果是一个object对象。
示例:
list1 = [1, 4, 6, 7, 9, 12, 17]
# 1. 定义功能函数:过滤序列中的偶数
def is_odd(x):
return x % 2 == 1
# 2. 调用filter,利用filter()过滤掉偶数
print(list(filter(is_odd, list1)))
运行结果:
1.4 利用filter()删除None或者空字符串
def is_not_empty(s):
return s and len(s.strip()) > 0
print(list(filter(is_not_empty, ['test', None, None, '', ' ', ' ', 'ddd', ' end'])))
运行结果: