具有不同参数的Python函数指针
我定义了三个函数具有不同参数的Python函数指针,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我定义了三个函数 def evaluate1(a, b): 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:
def evaluate1(a, b):
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
不同的参数。我该怎么办?谢谢 您想出了一个使用“函数指针”选择函数的好主意。但由于您知道当时选择的函数,因此也可以绑定参数:
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)
我将让您正确选择
参数
您已经想出了使用“函数指针”选择函数的好主意。但由于您知道当时选择的函数,因此也可以绑定参数:
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)
我将让您正确选择
参数
为什么不直接调用求值函数,而不是将它们分配给函数呢。使它更具可读性
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
为什么不直接调用求值函数,而不是将它们分配给函数呢。使它更具可读性
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
使用将帮助您使用动态签名的
**kwargs
。它们必须有不同的参数吗?如果是,您是否可以使用例如functools.partial
或lambda
来包装包含三个参数的函数,以便生成的evaluate\u函数始终包含两个参数?如果不是,则如果它们不这样做会更容易。在定义中使用*args
如果三个函数中的代码都不同,则可以在求值c中的函数声明中使用默认参数3。使用**kwargs
可以帮助您进行动态签名。它们必须有不同的参数吗?如果是,您是否可以使用例如functools.partial
或lambda
来包装包含三个参数的函数,以便生成的evaluate\u函数始终包含两个参数?如果否,则如果他们不这样做会更容易。在定义中使用*args
如果三个函数中的代码都不同,您可以在求值c中的函数声明中使用默认参数3?