Python函数指针具有不同的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python函数指针具有不同的参数相关的知识,希望对你有一定的参考价值。

我已经定义了三个功能。

def evaluate1(a, b):
    pass
def evaluate2(a, b):
    pass
def evaluate3(a, b, c):
    pass

我想要做的是使用一个指针来记录我将使用哪个评估函数,具体取决于test输入。逻辑如下所示:

def test(a, b, c, d):
    # let evaluate_function records which evaluate function I will use
    if c > 1:
        evaluate_function = evaluate3 # not sure
    else:
       if d:
           evaluate_function = evaluate1
       else:
           evaluate_function = evaluate2

    # execute the evaluate function
    evaluate_function(a, b, ?)

然而,由于evaluate3evaluate1evaluate3有不同的论点。我应该怎么做?谢谢!

答案

您已经想出了使用“函数指针”来选择函数的好主意。但既然你知道当时正在选择哪个函数,你也可以绑定参数:

def test(a, b, c, d):
    # let evaluate_function records which evaluate function I will use
    if c > 1:
        evaluate_function = evaluate3 # not sure
        params = a,b,d
    else:
       if d:
           evaluate_function = evaluate1
           params = a,b
       else:
           evaluate_function = evaluate2
           params = a,c

    # execute the evaluate function
    evaluate_function(*params)

我会留给你正确选择params

另一答案

为什么不直接调用evaluate函数而不是将它们分配给函数。使其更具可读性

def evaluate1(a, b):
    print('evaluate1')

def evaluate2(a, b):
    print('evaluate2')

def evaluate3(a, b, c):
    print('evaluate3')

def test(a, b, c=None, d=None):
    # let evaluate_function records which evaluate function I will use
    if c and c > 1:
        evaluate3(a, b, c)
    else:
       if d:
           evaluate1(a, b)
       else:
           evaluate2(a, c)

test(1,2,c=0.1,d=1)
#evaluate1
test(1,2)
#evaluate2
test(1,2,3)
#evaluate3

以上是关于Python函数指针具有不同的参数的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C Block与函数指针比较

函数指针与回调函数

在python中循环具有不同参数的函数

使用python运行具有不同参数的函数

具有相同名称但参数和返回类型不同的虚拟函数[重复]

指向具有多个参数作为函数参数的函数的指针