Python 实现 switch-case 问题请教

2020-06-13 13:39:05 +08:00
 viiii

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

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

switch (var){
    case 1,5,9,19:  # 取值为多个无规律的数字
        break;
    case 3,21,50:
        break;
    case default:
    	break;
}
968 次点击
所在节点    问与答
9 条回复
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
2020-06-13 13:46:29 +08:00
else if --> elif
好久不写,写错了- -
elmagnificogg
2020-06-13 14:10:24 +08:00
集合 in 操作啊
gzfrankie
2020-06-13 14:17:50 +08:00
用 if ( x==1) && (x==2
Else if (x==3)
else if
的格式。

python 编译器对这个其实是有优化的,会优化成 switch 对应的汇编。详见 pep3103 和 pep275
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
2020-06-13 15:36:36 +08:00
@mzotw2babm 不应该写 break,没有循环
mzotw2babm
2020-06-13 20:38:42 +08:00
@0bit 嗯嗯在下错了,好久没写了,也没仔细考虑,直接套了楼主的格式
viiii
2020-06-14 14:55:53 +08:00
@gzfrankie 知识点+1, 多谢
viiii
2020-06-14 14:57:19 +08:00
@mzotw2babm 用 in + list 是个好办法, 之前老是往 dict 上面想,钻牛角尖了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681219

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX