【Python】用Python实现switch case语句「建议收藏」

【Python】用Python实现switch case语句「建议收藏」方式一Python3.10版本更新了类似其他语言的switchcase结构,所以最好的方法是直接更新到python3.10,直接使用matchcase语句:C语言:switch(expression){caseconstant-expression:statement(s);break;/*可选的*/caseconstant-expression:statement(s);break;/*

大家好,欢迎来到IT知识分享网。

方式一

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 <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

更详细的介绍:
https://blog.csdn.net/Datapad/article/details/123205558

方式二

使用函数实现类似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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25759.html

(0)
上一篇 2023-07-08 15:00
下一篇 2023-07-13 19:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信