我有九个非常相似的函数,它们做的事情略有不同。它们都接受相同的输入,并在对它们执行相似的运算后返回相同类型的输出。作为一个非常简单的并行例子,考虑基本的数学计算:加法、减法、乘法、除法、模等,所有这些都需要2个输入并产生一个输出。假设一些外力控制要应用的操作,如下所示:

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

def sub(a, b):
    return a-b

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

....

# Emulating a very basic switch-case
cases = {'a' : add,
         's' : sub,
         'm' : mul,
         'd' : div,
         ...
         ...      }

# And the function call like so (`choice` is external and out of my control):
cases[choice](x, y)

有没有一种很好的方法将所有这些函数打包在一起(主要是为了避免为所有函数编写类似的docstrings:-P)?实际上,总的来说,有没有更好的方法来编写上述功能?

最佳答案

根据这些其他方法的大小,可以将它们打包到一个方法中,并在switch语句中使用lambda。

def foo(a, b, context):
    """ Depending on context, perform arithmetic """
    d = {
       'a': lambda x, y: x + y,
       's': lambda x, y: x - y,
       ..
    }
    return d[context](a, b)

foo(x, y, choice)

这将所有内容放在一个方法中,并避免使用多个docstring。

关于python - 许多类似的功能执行的功能略有不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45725443/

10-12 18:41