嵌套和unnested if的其他声明

时间:2016-01-28 04:54:35

标签: python if-statement nested nested-if

我想知道是否有任何方法可以为if语句的多个级别提供一个else语句。

我详细说明:

if <condition-1>:
    if <condition-2>:
        do stuff
    elif <condition-3>:
        do other stuff
else: #if either condition-1 or all nested conditions are not met
    do some other thing

我知道这可以通过添加&#34;做其他事情&#34;的功能轻松解决。并使用嵌套的else和toplevel来调用它,但我想知道是否有某种方法可以让它看起来更清洁。

提前致谢,欢迎任何想法。

2 个答案:

答案 0 :(得分:2)

不,不是真的。这实际上是python不希望你做的事情。它更喜欢保持可读性和清晰度,而不是华丽的&#34;招数。你可以通过组合语句或创建一个&#34;标志来做到这一点。变量

例如,你可以做

if <condition-1> and <condition-2>:
    # do stuff
elif <condition-1> and <condition-3>:
    # do other stuff
else:
    # do some other thing

或者,如果您因某些原因不想继续重复第1项条件(检查费用很高,更不清楚重复,或者您只是不想继续输入它),我们可以做到

triggered_condition = False
if <condition-1>:
    if <condition-2>:
        triggered_condition = True
        # do stuff
    elif <condition-3>:
        triggered_condition = True
        # do some other stuff
if not triggered_condition:
    # do some other thing

如果在函数中使用了它,我们甚至可以跳过标志

if <condition-1>:
    if <condition-2>:
        # do stuff and return
    elif <condition-3>:
        # do some other stuff and return
# do some other thing
# if we got here, we know no condition evaluated to true, as the return would have stopped execution

答案 1 :(得分:0)

有几种方法不是特别直观/可读......但是工作:

在这一篇中,我们利用了for ... else ...语法。任何成功的条件都应该发出中断

for _ in [1]:
    if <condition>:
        if <condition>:
            # where ever we consider ourselves "successful", then break
            <do stuff>
            break
        elif <condition>:
            if <condition>:
                <do stuff>
                break
else:
    # we only get here if nothing considered itself successful

另一种方法是使用try ... else ...,其中&#34;成功&#34;分支机构应该提出异常。

这些并不特别好,不建议使用!