V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
viiii
V2EX  ›  问与答

Python 实现 switch-case 问题请教

  •  
  •   viiii · 2020-06-13 13:39:05 +08:00 · 1026 次点击
    这是一个创建于 1653 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    注意一点,in 后面是 set,会更快。
    0bit
        6
    0bit  
       2020-06-13 15:36:36 +08:00
    @mzotw2babm 不应该写 break,没有循环
    mzotw2babm
        7
    mzotw2babm  
       2020-06-13 20:38:42 +08:00
    @0bit 嗯嗯在下错了,好久没写了,也没仔细考虑,直接套了楼主的格式
    viiii
        8
    viiii  
    OP
       2020-06-14 14:55:53 +08:00
    @gzfrankie 知识点+1, 多谢
    viiii
        9
    viiii  
    OP
       2020-06-14 14:57:19 +08:00
    @mzotw2babm 用 in + list 是个好办法, 之前老是往 dict 上面想,钻牛角尖了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:40 · PVG 06:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.