我有九个非常相似的函数,它们做的事情略有不同。它们都接受相同的输入,并在对它们执行相似的运算后返回相同类型的输出。作为一个非常简单的并行例子,考虑基本的数学计算:加法、减法、乘法、除法、模等,所有这些都需要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/