关于python:寻找一个很好的elif&if替代品,比如switch case

Looking for a good replacement for elif & if , like switch case

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Replacements for switch statement in python?

采用这种方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

我想用开关盒样式,但是Python不支持开关盒。

有替代品吗?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()

那么6-len(str(index))呢?


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

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

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