大家好,小编来为大家解答以下问题,python中swith-case,python的case写法,今天让我们一起来看看吧!
方式一
Python 3.10版本 更新了类似其他语言的switch case结构,所以最好的方法是直接更新到python3.10,直接使用match case 语句:
C语言:
switch (expression) { case constant-expression : statement(s); break; /* 可选的 */ case constant-expression : statement(s); break; /* 可选的 */ /* 您可以有任意数量的 case 语句 */ default : /* 可选的 */ statement(s); }
Python:
flag = False match (100, 200): case (100, 300): # Mismatch: 200 != 300 print('Case 1') case (100, 200) if flag: # Successful match, but guard fails print('Case 2') case (100, y): # Matches and binds y to 200 print(f'Case 3, y: {y}') case _: # Pattern not attempted print('Case 4, I match anything!')
#PEP 634: Structural Pattern Matching match subject: case: case : case : case _:
更详细的介绍:
【Python】Python 3.10 新特性之 match case语句_python match case_AiFool的博客-CSDN博客
方式二
使用函数实现类似switch case的效果:
def switch_case(value): switcher = { 0: "zero", 1: "one", 2: "two", } return switcher.get(value, 'wrong value')
使用匿名函数方式实现:
def foo(var,x): return { 'a': lambda x: x+1, 'b': lambda x: x+2, 'c': lambda x: x+3, }[var](x)
方式三
自定义switch case类:
# 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.
参考:https://www.cnblogs.com/gerrydeng/p/7191927.html