美文网首页
表驱动 与 函数字典

表驱动 与 函数字典

作者: zestloveheart | 来源:发表于2019-04-22 15:21 被阅读0次

介绍

表驱动法是一种编程模式(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

相关文章

  • 表驱动 与 函数字典

    介绍 表驱动法是一种编程模式(Scheme),从表里面查找信息而不使用逻辑语句(if 和case)它的好处是消除代...

  • redis笔记:字典

    本人博客同步发表,排版更佳 字典实现 哈希表 哈希表节点 字典 字典类型特定函数 redis会为用途不同的字典设置...

  • 表驱动法

    Table-Driven Approach表驱动法 表驱动法,用查表的方法获取数值 我们平时查字典以及念初中时查《...

  • MySQL 优化

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • MySQL 优化点

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • 字典实现的原理

    字典是根据hash表来映射key与value之间的存储的 取值是无须遍历数组而是将key代入到函数中得到其中的va...

  • 【Python_71-75】集合【b站搬运_子木】

    集合 也用{}定义(与字典一样),但是没有value 底层数据结构也是用hash表定义,用哈希函数计算位置(第一个...

  • NSDictionary实现原理

    NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash函数设计的...

  • 由if-else,switch代替方案引起的思考

    关键词:条件判断,多态,策略模式,哈希表,字典map作者:码匠信龙 笔者在用python实现事件驱动后,发现pyt...

  • 「Redis源码解读」—数据结构(二)哈希表

    Redis的字典使用哈希表作为底层实现 知识点 1.数据结构 哈希节点 哈希表 类型处理函数 2.哈希 哈希算法 ...

网友评论

      本文标题:表驱动 与 函数字典

      本文链接:https://www.haomeiwen.com/subject/oamlgqtx.html