函数作为参数传递

目录

一、先看一个实际需求

二、应用实例

三、注意事项和细节


一、先看一个实际需求

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))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们将函数作为参数传递给另一个函数时,我们可以使用函数指针或函数对象(函数器)来实现。 1. 函数指针: 使用函数指针,我们首先需要定义一个与要传递的函数具有相同签名(参数和返回值类型)的函数指针类型。然后,我们可以将函数的名称赋给指针,并将该指针作为参数传递给另一个函数。 例如,假设我们有一个函数 `void foo(int)`,我们希望将其作为参数传递给另一个函数 `void bar(void (*func)(int))`,则可以这样做: ```cpp void foo(int x) { // 函数体 } void bar(void (*func)(int)) { // 调用函数指针所指向的函数 func(42); } int main() { // 将函数指针作为参数传递给另一个函数 bar(foo); return 0; } ``` 2. 函数对象(函数器): C++中的函数对象是可调用对象,可以像函数一样被调用。我们可以定义一个类,并在该类中实现 `operator()` 运算符重载。然后,我们可以创建该类的对象,并将该对象作为参数传递给另一个函数。 例如,假设我们有一个函数对象类 `Foo`,我们希望将其作为参数传递给另一个函数 `void bar(Foo)`,则可以这样做: ```cpp class Foo { public: void operator()(int x) { // 函数体 } }; void bar(Foo func) { // 调用函数对象 func(42); } int main() { // 将函数对象作为参数传递给另一个函数 Foo foo; bar(foo); return 0; } ``` 无论是使用函数指针还是函数对象,我们都可以将函数作为参数传递给其他函数,并在接受参数的函数中调用该函数。这样可以实现更灵活的代码设计和功能扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值