我定义了三个功能。
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
与evaluate1
和evaluate3
具有不同的参数。我应该怎么做?谢谢!
答案 0 :(得分:1)
您已经想到了使用“函数指针”选择函数的好主意。但是,由于您知道当时选择的是哪个函数,因此也可以绑定参数:
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
。
答案 1 :(得分:1)
为什么不直接调用评估函数,而不是直接将其分配给函数。使其更具可读性
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