Python中switch Case语法完成

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

带默许管理的python switch


def foo(): 
    print "foo" 
def default(): 
    print "defalut" 

    "foo" : lambda : foo() 

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


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

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
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
            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
    if case('two'):
        print 2
    if case('ten'):
        print 10
    if case('eleven'):
        print 11
    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!"
    if case('A'): pass
    # ...
    if case('Z'):
        print "c is uppercase!"
    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!"
    if case(*string.uppercase):
        print "c is uppercase!"
    if case('!', '?', '.'): # normal argument passing style also applies
        print "c is a sentence terminator!"
    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 ={
    return web.get(urlPrefix,other)()
url = ''
webtype = getWebType(url)

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