最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[整理]Python中的switch case语句

Python crifan 6855浏览 0评论

折腾:

[记录]Flask中给活动到期添加提醒功能

期间,想要去给一个enum的值判断,实现一定的逻辑

需要用到 switch case

搜:

python switch case

Python中为什么没有switch语法结构,有什么代替方案吗? – 知乎

def case1(somearg):
    pass
def case2(somearg):
    pass
def case3(somearg):
    pass
switch={
1: case1,
2: case2,
3: case3
}
switch[case](arg)

Design and History FAQ — Python 2.7.12 documentation

Replacements for switch statement in Python? – Stack Overflow

def f(x):

    return {

        ‘a’: 1,

        ‘b’: 2,

    }.get(x, 9)    # 9 is default if x not found

Python没有switch语句的解决方法

其他语言中,switch语句大概是这样的

switch (var)

{

case value1: do_some_stuff1();

case value2: do_some_stuff2();

case valueN: do_some_stuffN();

default: do_default_stuff();

}

而python本身没有switch语句,解决方法有以下3种:

A.使用dictionary

values = {

value1: do_some_stuff1,

value2: do_some_stuff2,

valueN: do_some_stuffN,

}

values.get(var, do_default_stuff)()

具体请参考: Python switch statement

这个方法的缺点是:我不知道do_some_stuff是不是允许多个语句,如何实现,

也许是可以的,我不知道-.-

B.使用lambda

在PHP中,

switch ($value) {

case ‘a’:

$result = $x * 5;

break;

case ‘b’:

$result = $x + 7;

break;

case ‘c’:

$result = $x – 2;

break;

}

在python中:

result = {

‘a’: lambda x: x * 5,

‘b’: lambda x: x + 7,

‘c’: lambda x: x – 2

}[value](x)

具体参考: Switch statements in Python

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

        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

为什么Python中没有Switch/Case语句? – Python – 伯乐在线

转载请注明:在路上 » [整理]Python中的switch case语句

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.198 seconds, using 22.17MB memory