V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
viiii
V2EX  ›  问与答

Python 实现 switch-case 问题请教

  •  
  •   viiii · Jun 13, 2020 · 1364 views
    This topic created in 2145 days ago, the information mentioned may be changed or developed.

    都知道 python 没有 switch-case 语句,通常要实现类似功能的时候,通过 dict 实现

    那么,如果遇到下列情况,用 python 该怎么实现比较好呢?

    switch (var){
        case 1,5,9,19:  # 取值为多个无规律的数字
            break;
        case 3,21,50:
            break;
        case default:
        	break;
    }
    
    9 replies    2020-06-14 14:57:19 +08:00
    mzotw2babm
        1
    mzotw2babm  
       Jun 13, 2020
    用个列表?
    if i in [1, 5, 9, 19]:
    break
    else if i in [3, 21, 50]:
    break
    else
    break
    mzotw2babm
        2
    mzotw2babm  
       Jun 13, 2020
    else if --> elif
    好久不写,写错了- -
    elmagnificogg
        3
    elmagnificogg  
       Jun 13, 2020 via Android
    集合 in 操作啊
    gzfrankie
        4
    gzfrankie  
       Jun 13, 2020 via iPhone
    用 if ( x==1) && (x==2
    Else if (x==3)
    else if
    的格式。

    python 编译器对这个其实是有优化的,会优化成 switch 对应的汇编。详见 pep3103 和 pep275
    0bit
        5
    0bit  
       Jun 13, 2020
    ``` python
    if var in {1, 5, 9, 19}:
    pass
    elif var in {3, 21, 50}:
    pass
    else:
    pass
    ```

    注意一点,in 后面是 set,会更快。
    0bit
        6
    0bit  
       Jun 13, 2020
    @mzotw2babm 不应该写 break,没有循环
    mzotw2babm
        7
    mzotw2babm  
       Jun 13, 2020
    @0bit 嗯嗯在下错了,好久没写了,也没仔细考虑,直接套了楼主的格式
    viiii
        8
    viiii  
    OP
       Jun 14, 2020
    @gzfrankie 知识点+1, 多谢
    viiii
        9
    viiii  
    OP
       Jun 14, 2020
    @mzotw2babm 用 in + list 是个好办法, 之前老是往 dict 上面想,钻牛角尖了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5341 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 03:49 · PVG 11:49 · LAX 20:49 · JFK 23:49
    ♥ Do have faith in what you're doing.