【问题标题】:IF Statement Formatting PythonIF 语句格式化 Python
【发布时间】:2018-05-02 12:57:08
【问题描述】:

我正在尝试创建一个多层 IF 语句,但我不确定以下语句的格式是否正确。

我在阅读下面的嵌套 IF 语句时遇到问题,是否可以以更有效的方式编写此代码?

 if (a>= gT) and (cLow> rBT):
            print("Alpha 1")


            if (a_high> c_high) and (c_low < d_low):
                if (a> abc) and (a< c_low):
                    print("Final Count")

                    if (min(a, b) > min(c, d)) and \
                            (max(e,f) > max(g, h)): print("All Memory Deleted")

【问题讨论】:

标签: python if-statement


【解决方案1】:

除了使缩进更统一、删除多余的括号、结合第二个和第三个 if 测试之外,您没有什么可以改进的。

if a >= gT and cLow > rBT:
    print("Alpha 1")
    if a_high > c_high and c_low < d_low and a > abc and a < c_low:
        print("Final Count")
        if min(a, b) > min(c, d) and max(e,f) > max(g, h):
            print("All Memory Deleted")

结合第二个和第三个if 测试是安全的原因是and 运算符“短路”,即在expression_1 and expression_2 中,如果expression_1 为假,那么expression_2 是未评估。有关此主题的更多信息以及示例(在 Python 2 中),请参阅我的回答 here


顺便说一句,如果可以的话,最好避免反斜杠继续:它太脆弱了。反斜杠后的任何空格都会中断延续。相反,如果它还没有使用某种形式的括号,您通常可以将长表达式括在括号中。例如,

if (min(a, b) > min(c, d) and 
    max(e,f) > max(g, h)):

有关详细信息,请参阅 Python 样式指南 PEP-0008

【讨论】:

    【解决方案2】:

    虽然可能有一些不这样做的原因,但要考虑执行时间,如果嵌套 if 语句的可读性对您来说很重要,那么类似的方法也可以。

    case_1 = case_2 = case_3 = False
    
    try:
        case_1 = a >= gT and cLow > rBT
        case_2 = a_high > c_high and c_low < d_low and a > abc and a < c_low
        case_3 = min(a, b) > min(c, d) and max(e, f) > max(g, h)
    except NameError:
       pass
    
    if case_1:
        print("Alpha 1")
        if case_2:
            print("Final Count")
            if case_3:
                print("All Memory Deleted")
    

    【讨论】:

    • 当然可以,尽管您可以去掉许多括号。预先计算条件可能不合适的一个原因是,如果前面的条件失败,后面的一些计算可能无效。
    • 是的,这是一个重要的考虑因素。
    猜你喜欢
    • 2021-09-20
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多