在Python中模拟功能齐全的开关

时间:2014-05-08 16:01:49

标签: python switch-statement

我已阅读Replacements for switch statement in Python?并且没有一个答案似乎完全模拟了一个开关。

我知道你可以使用if elif else或字典,但我想知道......在Python中是否有可能完全模拟一个包括掉期和默认的开关(在没有定义一个巨大的功能之前 - 手)?

我并不过分关注性能,我主要对可读性感兴趣,并希望获得switch语句的逻辑布局,就像Python中的C语言一样

这是否可以实现?

1 个答案:

答案 0 :(得分:2)

由于您不想使用字典或其他人,最接近的仿真AFAIK将是这样的:

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

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!"

@Author Brian Beck

@source:http://code.activestate.com/recipes/410692/< - 还有其他建议,您可能需要查看是否足够好

请注意,您必须使用(或导入此类切换)