目录
一、先看一个实际需求
def f1(num1,num2):
max_val=num1 if num1>num2 else num2
return max_val
def f2(num1,num2):
max_val=num1 if num1>num2 else num2
return num1+num2,max_val
问题分析:
1、f1和f2都有对两个数求最大值的需求
2、如果有更多的函数也有对两个数求最大值的需求,在每个函数都写一份相同代码会冗余,而且不利于维护
3、解决方案,编写一个函数(该函数可以返回两个数的最大值),将该函数作为参数传给f1,f2
-->引出知识点:函数作为参数传递
二、应用实例
1、函数也可以作为参数传递
2、实例代码
# 定义一个函数,可以返回两个数的最大值
def get_max_val(num1,num2):
max_val=num1 if num1>num2 else num2
return max_val
def f1(fun,num1,num2):
"""
功能:调用fun返回num1和num的最大值
:param fun: 表示接收一个函数
:param num1: 传入数
:param num2: 传入数
:return: 最大值
"""
return fun(num1,num2)
def f2(fun,num1,num2):
"""
功能:调用fun返回num1和num的最大值,同时返回两个数之和
:param fun: 表示接收一个函数
:param num1: 传入数
:param num2: 传入数
:return: 最大值、两数之和
"""
return fun(num1,num2),num1+num2
# 测试
print(f1(get_max_val,50,20))
x,y=f2(get_max_val,20,10)
print(f"x={x} y={y}")
三、注意事项和细节
1、函数作为参数传递,传递的不是数据,而是业务处理逻辑
2、一个函数,可以接收多个函数作为参数传入
# 定义一个函数,可以返回两个数的最大值
def get_max_val(num1,num2):
max_val=num1 if num1>num2 else num2
return max_val
# 定义一个函数,可以返回两个数的和
def get_sum(num1,num2):
return num1+num2
# f3接收多个函数作为参数传入
def f3(fun1,fun2,num1,num2):
return fun1(num1,num2),fun2(num1,num2)
# 测试
print(f3(get_max_val,get_sum,30,50))