什么是Python等效的case/Switch语句?

是否有switch语句的Python等价物?

2112250 次浏览

Python 3.10及以上

在Python 3.10中,他们引入了模式匹配

python留档的示例:

def http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"


# If an exact match is not confirmed, this last case will be used if provided
case _:
return "Something's wrong with the internet"

在Python 3.10之前

虽然官方留档很高兴不提供switch,但我看到了使用字典的解决方案

例如:

# define the function blocks
def zero():
print "You typed zero.\n"


def sqr():
print "n is a perfect square\n"


def even():
print "n is an even number\n"


def prime():
print "n is a prime number\n"


# map the inputs to the function blocks
options = {0 : zero,
1 : sqr,
4 : sqr,
9 : sqr,
2 : even,
3 : prime,
5 : prime,
7 : prime,
}

然后调用等效的switch块:

options[num]()

这开始分崩离析,如果你严重依赖通过下降。

直接替换为if/elif/else

但是,在许多情况下,在Python中有更好的方法来做到这一点。请参阅“在Python中替换Switch语句?”。