zoukankan      html  css  js  c++  java
  • [转载] Python没有switch语句的解决方法

    from http://i.azpala.com/2008/01/20/python-switch/

    其他语言中,switch语句大概是这样的

    switch (var)
    {
        case value1: do_some_stuff1();
        case value2: do_some_stuff2();
        ...
        case valueN: do_some_stuffN();
        default: do_default_stuff();
    }

    python本身没有switch语句,解决方法有以下3:

    A.使用dictionary

    values = {
               value1: do_some_stuff1,
               value2: do_some_stuff2,
               ...
               valueN: do_some_stuffN,
             }
    values.get(var, do_default_stuff)()

    具体请参考: Python switch statement

    这个方法的缺点是:我不知道do_some_stuff是不是允许多个语句,如何实现,

    也许是可以的,我不知道-.-

    B.使用lambda

    在PHP中,

    switch ($value) {
        case 'a':
           $result = $x * 5;
            break;
        case 'b':
            $result = $x + 7;
            break;
        case 'c':
            $result = $x - 2;
            break;
    }

    在python中:

    result = {
     'a'lambda x: x * 5,
     'b'lambda x: x + 7,
     'c'lambda x: x - 2
    }[value](x)

    具体参考: Switch statements in Python

    C.Brian Beck提供了一个类 switch 来实现其他语言中switch的功能

    # This class provides the functionality we want. You only need to look at
    #
     this if you want to know how this works. It only needs to be defined
    #
     once, no need to muck around with its internals.
    class switch(object):
        def __init__(self, value):
            self.value = value
            self.fall = False
     
        def __iter__(self):
            """Return the match method once, then stop"""
            yield self.match
            raise StopIteration
     
        def match(self, *args):
            """Indicate whether or not to enter a case suite"""
            if self.fall or not args:
                return True
            elif self.value in args: # changed for v1.5, see below
                self.fall = True
                return True
            else:
                return False
     
    # The following example is pretty much the exact use-case of a dictionary,
    #
     but is included for its simplicity. Note that you can include statements
    #
     in each suite.
    v = 'ten'
    for case in switch(v):
        if case('one'):
            print 1
            break
        if case('two'):
            print 2
            break
        if case('ten'):
            print 10
            break
        if case('eleven'):
            print 11
            break
        if case(): # default, could also just omit condition or 'if True'
            print "something else!"
            # No need to break here, it'll stop anyway

  • 相关阅读:
    PHP数据库备份文件分卷导入的实现思路
    用delphi如何实现启动停止windows服务
    【创意logo】第23个世界无烟日 让烟草远离女性
    修改“windows xp资源管理器”的默认打开路径
    PHP百行代码快速构建简易聊天室
    简单的方法实现判断Mysql内某个字段Fields是否存在
    Blackhand的插件管理部分
    PHP 与 ASP.NET 正面交锋
    C语言运算符
    功能齐全的发送邮件类
  • 原文地址:https://www.cnblogs.com/iamfy/p/2363995.html
Copyright © 2011-2022 走看看