一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Python中switch Case语法实现

时间:2016-04-28 编辑:简简单单 来源:一聚教程网

 

其他语言中,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)()
 
B.使用lambda

result = {
  'a': lambda x: x * 5,
  'b': lambda x: x + 7,
  'c': lambda x: x - 2
}[value](x)
 
C.Brian Beck提供了一个类 switch 来实现其他语言中switch的功能
http://code.activestate.com/recipes/410692/


# 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
 
# break is used here to look as much like the real thing as possible, but
# elif is generally just as good and more concise.
 
# Empty suites are considered syntax errors, so intentional fall-throughs
# should contain 'pass'
c = 'z'
for case in switch(c):
    if case('a'): pass # only necessary if the rest of the suite is empty
    if case('b'): pass
    # ...
    if case('y'): pass
    if case('z'):
        print "c is lowercase!"
        break
    if case('A'): pass
    # ...
    if case('Z'):
        print "c is uppercase!"
        break
    if case(): # default
        print "I dunno what c was!"
 
# As suggested by Pierre Quentel, you can even expand upon the
# functionality of the classic 'case' statement by matching multiple
# cases in a single shot. This greatly benefits operations such as the
# uppercase/lowercase example above:
import string
c = 'A'
for case in switch(c):
    if case(*string.lowercase): # note the * for unpacking as arguments
        print "c is lowercase!"
        break
    if case(*string.uppercase):
        print "c is uppercase!"
        break
    if case('!', '?', '.'): # normal argument passing style also applies
        print "c is a sentence terminator!"
        break
    if case(): # default
        print "I dunno what c was!"
 
# Since Pierre's suggestion is backward-compatible with the original recipe,
# I have made the necessary modification to allow for the above usage.
 
---------------------------------------------------------------------------------------
获取网站类型例子:


import sys
from urllib.parse import urlparse
 
def getWebType(url):
    
    r = urlparse(url)
 
    urlDomain = r.netloc
    urlPrefix = urlDomain.split('.')[0]
    
    def www():
        return "www"
    def blog():
        return "blog博客"
    def bbs():
        return "BBS论坛"
    def tieba():
        return "tieba贴吧"
    def wiki():
        return "wiki维基"
    def baike():
        return "baike百科"
    def img():
        return "img图片"
    def ask():
        return "ask问答"
    def other():
        return "other"
 
    web ={
        "www":www,
        "bbs":bbs,
        "wiki":wiki,
        "baike":baike,
        "tieba":tieba,
        "iask":ask,
        "ask":ask,
        "img":img,
        "image":img,
        }
    return web.get(urlPrefix,other)()
 
url = 'http://www.111com.net'
webtype = getWebType(url)
print(webtype)

热门栏目