表驱动 与 函数字典

2019-04-22  本文已影响0人  zestloveheart

介绍

表驱动法是一种编程模式(Scheme),从表里面查找信息而不使用逻辑语句(if 和case)
它的好处是消除代码里面到处出现的if、else、swith语句,让凌乱代码变得简明和清晰。
对简单情况而言,表驱动方法可能仅仅使逻辑语句更容易和直白,但随着逻辑的越来越复杂,表驱动法就愈发有吸引力。

正文

假如要实现以下功能,
输入('+',a,b),要返回 a+b
输入('-',a,b),要返回a-b

用if实现
def test(c,a,b):
    if c == '+':
        return a + b
    elif c == '-':
        return a - b

如果要加新的功能,比如 乘*、除/,就要更改test代码为

def test(c,a,b):
    if c == '+':
        return a + b
    elif c == '-':
        return a - b
    elif c == '*':
        return a * b
    elif c == '/':
        return a / b

那每当要添加该函数的功能,就必须修改该函数的内容。这样就破坏了封装性和违背了开闭原则

表驱动

利用表驱动,可以解决这个问题。

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

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

func_dict = {'+':add,'-':minus}
print(func_dict['+'](1,2))

要加入乘法函数,只需添加一个mul函数,然后修改func_dict字典。

def mul(a,b):
    return a * b
func_dict = {'+':add,'-':minus,'*':mul}
print(func_dict['*'](1,2))

这里的func_dict实际上就作为表驱动中的表给出,可以视作为一个配置文件,是动态更改的。
另外一些基础用法可见下面的两篇参考博客,也写的挺好。

参考

https://blog.csdn.net/qq_22555107/article/details/78884261
https://www.cnblogs.com/winner-0715/p/9382048.html#_label0

上一篇下一篇

猜你喜欢

热点阅读