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


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

    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

  • 相关阅读:
    JAVA8十大新特性详解
    博客主题
    nideshop小程序商城部署
    Eclipse创建Maven多模块工程Module开发(图文教程)
    将博客搬至CSDN
    腾讯开源软件镜像站上线
    python-应用OpenCV和Python进行SIFT算法的实现
    初学node.js-nodejs中实现删除用户路由
    本博客正在实验姿态捕捉,可以尝试允许摄像头运行
    博客园如何实现看板娘Live2d?来吧少年,开启新世界的大门!——live2d 博客园 个性化定制
  • 原文地址:https://www.cnblogs.com/descusr/p/2473684.html
Copyright © 2020-2023  润新知