请问为什么 if 和 else 要匹配呀? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
OwO233
V2EX    程序员

请问为什么 if 和 else 要匹配呀?

  •  
  •   OwO233 2024-03-31 11:44:30 +08:00 via iPhone 4165 次点击
    这是一个创建于 559 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,比如在 python 中,if 判断条件后,不需要 else 就可以执行下面的语句,为啥还要加个 else 啊?如果需要判断多个条件,也可以直接使用 elif 判断后续条件,不是很理解 else 的用途,求教各位,if 后面加上 else 是为了代码规范还是对资源上会有更优的利用呀?
    17 条回复    2025-08-20 17:37:59 +08:00
    vituralfuture
        1
    vituralfuture  
       2024-03-31 12:00:19 +08:00 via Android   1
    else 可以在条件不成立的时候多执行一段逻辑

    举个例子,如果今天下雨就穿雨鞋,否则就穿运动鞋,穿完鞋之后出门

    话说问这种问题,op 是初学编程?
    OwO233
        2
    OwO233  
    OP
       2024-03-31 12:02:59 +08:00 via iPhone
    @vituralfuture #1 是啊,想学习变成自己编写一些自动挂机脚本。
    ohayoo
        3
    ohayoo  
       2024-03-31 12:04:07 +08:00   1
    if 可以单独存在,不一定要和 else 搭配,如果 condition 是 False ,else 下面的语句被执行。
    换句话说,条件不成立的时,一定要干一件什么事情,则需要 else
    OwO233
        4
    OwO233  
    OP
       2024-03-31 12:04:28 +08:00 via iPhone
    @vituralfuture 感谢你的回复。
    请问条件不成立不写 else 后面写一段语句一样可以执行,但是为什么需要写 else 呀?
    OwO233
        5
    OwO233  
    OP
       2024-03-31 12:10:38 +08:00 via iPhone
    我知道了,如果不加 else ,前面的 if 判断 true 后还会重复执行一遍,我刚开始逻辑出问题了…
    ohayoo
        6
    ohayoo  
       2024-03-31 12:11:37 +08:00   1
    @OwO233 #4 [不写 else 后面写一段语句一样可以执行] 那样的话,和你的条件成不成立没有关系,反正会执行
    zictos
        7
    zictos  
       2024-03-31 12:11:59 +08:00   1
    elif 也是要指定具体的条件的,而 else 是无需指定具体条件的,不满足前面的条件时就执行 else 里面的代码。如果不需要 else 也可以不用,可以只用 if 或者只用 if 加 elif
    dsb2468
        8
    dsb2468  
       2024-03-31 12:13:46 +08:00   1
    python 没太研究过,不过如果是 C++,那则涉及到编译器优化的一些知识。

    比如同样比较是否等于 1 ,if else 和 switch 在编译阶段就会体现出效率的不同:
    https://blog.csdn.net/dsb2468/article/details/72635138
    V2April
        9
    V2April  
       2024-03-31 12:22:21 +08:00   1
    else 是如果前面的 if 和 elif 都不满足,直接执行 else 里面的语句。但如果前面的 if 和 elif 有一个被满足,就不会执行。好比你老婆想吃水果了,她优先想吃草莓,但如果草莓没上市买两个苹果也可以。她给你编程:
    '''
    if 有草莓
    买草莓
    else
    买苹果
    end if
    回家
    '''
    这样你总是会带一些水果回家。

    如果编程:
    '''
    if 有草莓
    买草莓
    end if
    回家
    '''
    那没有草莓你就会空手回家。

    如果编程:
    '''
    if 有草莓
    买草莓
    end if
    买苹果
    回家
    '''
    那无论如何你都会买苹果回家。

    当然你也可以写成
    '''
    if cond1
    action1
    elif not cond1
    action2
    endif
    '''
    elif not cond1 和 else 是一样的。但如果你有很多 if~elif~elif~elif......,你最后给一个 else 来兜住所有剩下情况,肯定比写一个 elif not cond1 and not cond2 and......要容易。而且 else 不会做任何判断,只是起兜底作用。有的时候你的 if 判断本身是一件耗资源的事,你用 elif 来代替 else 就很不划算了。
    AV1
        10
    AV1  
       2024-03-31 14:18:22 +08:00   2
    写在 else 里和 else 外的效果是不一样的。

    if condition:
    #下面这句是条件成立时执行
    action1()
    else:
    #下面这句是条件不成立时执行
    action2()
    #下面这句无论条件成不成立都会执行
    action3()
    oliveira
        11
    oliveira  
       2024-03-31 15:58:05 +08:00   1
    这个问题,你写个 Demo 运行一遍就知道了啊...
    PrinceofInj
        12
    PrinceofInj  
       2024-03-31 20:21:33 +08:00   3
    想起了那个笑话:
    老婆:去菜市场买些苹果,如果有卖西瓜的,买一个。
    过了半小时,老公拿着一个苹果回家了
    老婆:你怎么只买了一个苹果?
    老公:碰上卖西瓜的了。
    lisongeee
        13
    lisongeee  
       2024-03-31 23:39:40 +08:00   1
    python 很久不写了,不太熟悉了,来说一下 js 中的情况,按照你的说法

    if(a){}else{} 可以换成 if(a){}{} 但实际上这也是正确的语法结构,看下面的语法结构



    最后的 {} 是一个块级作用域语句,里面的内容会不管 if 的判断如何最后都会正常执行
    EndlessMemory
        14
    EndlessMemory  
       2024-04-01 10:54:20 +08:00
    除了 if 情况下的,就使用 else ,有啥毛病吗
    maotao456
        15
    maotao456  
       2024-04-01 11:22:00 +08:00
    我现在写代码,在非必要情况下不用 else.

    假设代码是这样

    穿运动鞋
    if 下雨 == true {
    穿雨鞋
    }

    出门
    jorkingwire
        16
    jorkingwire  
       2024-04-01 18:03:21 +08:00
    为什么我看不懂了,是我的问题么
    elonlee
        17
    elonlee  
       52 天前
    这个要涉及到防御性编程的知识了,程序的输出结果必须是明确的,只有 if 没有 else 就是逻辑不完整,就是有业务不闭环的情况发生,一定要杜绝这种情况发生。for example , 比如是一个结算系统,涉及到扣账户余额的环节:比如

    if( 消费金额 <= 账户余额 ){
    // 执行扣减逻辑
    }else{
    pass
    }

    以上代码事想以下没有 else
    1. 逻辑不清晰
    2. 单元测试不闭环
    3. 如果有更多的 if 分支可能会存在,业务逻辑覆盖的情况。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2730 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 11:37 PVG 19:37 LAX 04:37 JFK 07:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86