首页 > 解决方案 > 避免使用长条件语句来调用具有相同参数但名称不同的函数?

问题描述

我有许多函数具有相同的参数,但在后台进行的计算略有不同。作为一个人为的例子:

def sum(a, b):
    return a + b

def multiply(a, b):
    return a * b

def divide(a, b):
    return a / b

然后我发现自己不得不在一个单独的程序中调用这些函数,例如:

def myfunc(a, b, op):
    if op == "add": return add(a, b)
    if op == "multiply": return multiply(a, b)
    # etc etc

有哪些 Pythonic 方法可以避免这种情况?我能想到的唯一选择是定义一个更通用的函数,如下所示:

def do_something(a, b, op):
    if op == "add": return add(a, b)
    if op == "multiply": return multiply(a, b)
    # etc etc

def myfunc(a, b, op): 
    return do_something(a, b, op)

这更干净,myfunc但仍然具有长条件语句的缺点。

有人有建议吗?

谢谢!

标签: python

解决方案


传递函数而不是字符串呢?

def sum(a, b):
    return a + b

def multiply(a, b):
    return a * b

def divide(a, b):
    return a / b

def myfunc(a, b, op):
    return op(a, b)

print(myfunc(2, 3, add))
print(myfunc(2, 3, multiply))
print(myfunc(2, 3, divide))

如果您更喜欢将操作作为字符串传递,您可以使用eval

def sum(a, b):
    return a + b

def multiply(a, b):
    return a * b

def divide(a, b):
    return a / b

def myfunc(a, b, op):
    return eval(op)(a, b)

print(myfunc(2, 3, "add"))
print(myfunc(2, 3, "multiply"))
print(myfunc(2, 3, "divide"))

推荐阅读