寻找elif& amp;的良好替代品如果像开关一样

时间:2013-01-01 20:49:38

标签: python if-statement switch-statement

  

可能重复:
  Replacements for switch statement in python?

鉴于此方法:

def getIndex(index):
    if((index) < 10):
        return 5
    elif(index < 100):
        return 4
    elif(index < 1000):
        return 3
    elif(index < 10000):
        return 2
    elif(index < 100000):
        return 1
    elif(index < 1000000):
        return 0

我希望以switch-case风格制作它,但是,Python不支持switch case。

是否有任何替代品?

3 个答案:

答案 0 :(得分:3)

6-len(str(index))怎么办?

答案 1 :(得分:3)

经典的pythonic方法是使用字典,其中键是您的测试,值是可调用的函数,反映您打算做什么:

def do_a():
    print "did a"

self do_b():
    print " did b"

#... etc

opts = {1:do_a, 2:do_b}

if value in opts: 
    opts[value]()
else:
    do_some_default()

答案 2 :(得分:2)

在这个特定的例子中,我只会使用数学:

def get_index(index):
    return 6 - int(round(math.log(index, 10)))

您必须使用内置函数round,因为math.log会返回一个浮点数。