寻找 elif 和 if 的良好替代品,例如 switch case [重复]

Posted

技术标签:

【中文标题】寻找 elif 和 if 的良好替代品,例如 switch case [重复]【英文标题】:Looking for a good replacement for elif & if , like switch case [duplicate] 【发布时间】:2012-12-16 08:24:32 【问题描述】:

可能重复: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 。

有什么替代品吗?

【问题讨论】:

***.com/questions/60208/… - 看看这个! :) 你可以在这段代码的任何地方使用if而不是elif Python 没有switch 的原因是它在内部实际上与您的elif 语句系列完全一样。使用elif 本质上是相同的,并且更明显的逻辑是什么。它已经是 Python 的首选语法。没有理由改变它。 查看问题的答案switch case in python doesn't work; need another pattern。 【参考方案1】:

6-len(str(index)) 呢?

【讨论】:

【参考方案2】:

在这种特殊情况下,我只会使用数学:

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

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

【讨论】:

【参考方案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()

【讨论】:

以上是关于寻找 elif 和 if 的良好替代品,例如 switch case [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python 中if和elif的区别

寻找 Psyco 的良好替代品(Python->C 编译器)[关闭]

Flash 10 + AS 2.0中Adobe AIR和Zinc的良好替代品

将 if-elif-else 语句放在一行上?

lambda 中if-elif-if

二维数组 Python 问题,if 范围,elifs,一个没有按预期工作