高阶函数至少符合以下两个条件中的一个:
1.接收一个或者多个函数作为参数
2.将函数作为返回值返回
list1 = [i for i in range(2, 100, 7)]
def fun1(i):
"""
检查一个数是否是偶数
:param i: 待检测的数
:return: 返回bool值
"""
if i % 2 == 0:
return True
return False
def fun2(i):
"""
检查一个数是否是奇数
:param i: 待检测的数
:return: 返回bool值
"""
if i % 2 != 0:
return True
return False
def fun3(i):
"""
检查一个数是否是大于5
:param i: 待检测的数
:return: 返回bool值
"""
if i > 5:
return True
return False
def fun(func, lst):
"""
对一个列表进行操作,并将结果以新列表的方式返回
:param func: 需要进行的操作
:param lst: 待操作的列表
:return: 返回一个列表
"""
new_list = []
for n in lst:
if func(n):
new_list.append(n)
return new_list
# 将fun2作为参数传递到fun中,所以不能加括号(fun2()),加括号代表调用方法,得到返回值
print(fun(fun2, list1)) #[9, 23, 37, 51, 65, 79, 93]
# filter(function,iterable) 可以从序列中过滤出符号条件的元素,保存到一个新的序列中返回
# 参数:
# 1.函数,根据该函数来过滤序列(可以迭代的结构)
# 2.需要过滤的序列(可以迭代的结构)
# 返回值:
# 过滤后的新序列(可迭代的结构)
# 将fun3当做参数传递到filter()中,函数调用完就没用了
print(list(filter(fun3, list1))) # [9, 16, 23, 30, 37, 44, 51, 58, 65, 72, 79, 86, 93]
将函数作为返回值返回
# sum()用来求一个列表中所有元素的和
# print(sum(nums)/len(nums))
def make_average():
# 创建一个列表,用来保存数值
nums = []
def average(n):
# 将n添加到列表中
nums.append(n)
# 求平均数
return sum(nums)/ len(nums)
return average # 返回内层函数
average = make_average()
print(average(10))# 10.0
print(average(20))# 15.0
print(average(30))# 20.0