用数组,列表或字典来代替选择语句

  相信大家对众多选择判断语句都感到很厌烦,一大堆的

if something:do something()

else:

do something, 

或者是

switch(something):

  case st1:do1

  case st2:do2

  ...

  case stn:don

谁看了都会烦。不仅增加了巨大的代码量,而且不能很好地进行逻辑封装。

  其实看到标题,高手就知道怎么做了。是的,就是用数组,列表或字典来替代这些选择判断语句。怎么处理呢?

  比如我要对不同类型的书籍进行不同的处理,用 python 来实现

  有个 read_book: 方法

  read_book(book):

    ret = None

    if book == 'python':

       ret = python()

    elif book == 'C#':

      ret = CSharp()

    elif book == 'C':

      ret = C()

    elif book == 'C++':

      ret = CPlus()

    elif book == 'java':

      ret = java()

    elif book == 'lua':

      ret = lua()

    return ret

我认为读者看到一大堆if,都不会想看下去了,这样的代码实在太烂了。好,让我们来修改一下,我这里是用字典来实现的,请看我是怎样用字典来实现的:

read_book(book):

  book_dict = { 'python': python(), 'C#': CSharp(), 'C':C(), 'C++':CPlus(), 'java':java(),'lua':lua() }

  return book_dict[book]

看到没,两行就解决了!!不仅节省了大量代码,而且思路也更加清晰。

  如果书籍有多种分类呢?比如上面的是程序书籍,如果我想看人文书籍呢?这就涉及到了 一Key 对 多Key 的问题,其实也很好解决。

read_book(cataglog, book):

  book_dict = {'promgram': { 'python': python(), 

               'C#': CSharp(), 

               'C':C(), 

               'C++':CPlus(), 

               'java':java(),

               'lua':lua() } 

         'renwen': { 'zhexue': zhexue(),

               'shici': shici(),

               'sanwen': sanwen(),

               'guwen':guwen() }

        }

  return book_dict[catalog][book]

如果用if,就要使用两层嵌套,如果有多个嵌套,那代码看起来岂不是很恶心!!

我这里是用字典实现的,因为字典的索引好操作,很直观。如果用数组或列表,就可以用多维数组,但这个不好操作,要先遍历一遍数组或列表,对于数据量不大的时候,跟if判断语句差不多;如果数据量很大,可以别去遍历,先进行检索 Key,再去查找相应的函数。

其实我这里有个不足之处,就是每调用一次read_book函数,都要把所有的函数(执行这些python(),CSharp(),C())执行一次,这样会大大削弱程序性能。如果函数不复杂,也影响不了多少;如果函数很复杂呢?别担心,还是有解决办法的。

read_book(cataglog, book):

#注意,我用双引号把函数变成字符串

  book_dict = {'promgram': { 'python': 'python()'

                'C#': 'CSharp()'

                'C':'C()'

                'C++':'CPlus()'

                'java':'java()',

                'lua':'lua()'

         'renwen': { 'zhexue': 'zhexue()',

               'shici': 'shici()',

               'sanwen': 'sanwen()',

               'guwen':'guwen()' } 

        }

  return eval(book_dict[catalog][book])

大家注意到没,我把函数转成字符串,这样就不用执行全部函数了,只在最后用 eval() 执行一次函数,是不是很爽啊?!!!

推荐几个用python写的网站:
  python站:http://simple-is-better.com/news/552

   站长工具界新秀 站长工具 www.gongju.com, 这里有个很好用的网站测速工具:ce.gongju.com/cnblogs.com

原文地址:https://www.cnblogs.com/descusr/p/2473684.html