Python中switch Case语法完成

2019-09-05 06:52栏目:编程学习

带默许管理的python switch

 

[python] 
def foo(): 
    print "foo" 
 
def default(): 
    print "defalut" 

    "foo" : lambda : foo() 
}.get(value,default)() 

别的语言中,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

switch [python] def foo(): print foo def default(): print defalut { foo : lambda : foo() }.get(value,default)()...

result = {
  'a': lambda x: x * 5,
  'b': lambda x: x 7,
  'c': lambda x: x - 2
}[value](x)
 
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
 
# 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 = ''
webtype = getWebType(url)
print(webtype)

版权声明:本文由威尼斯人app发布于编程学习,转载请注明出处:Python中switch Case语法完成