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

2024-03-29 13:24:02 发布

您现在位置: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, ?)

但是,由于evaluate3具有不同于evaluate1evaluate3的参数。我该怎么办?谢谢!你知道吗


Tags: 函数testif定义def记录functionpass
2条回答

您已经想出了一个使用“函数指针”来选择函数的好主意。但由于您知道当时选择的函数,因此也可以绑定参数:

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

相关问题 更多 >