python - 避免编写级联 if-then-else
问题描述
有没有办法让我在下面的代码不使用一堆 if-then-else?
if isinstance(t, int): v = 10
elif isinstance(t, bool): v = 20
elif isinstance(t, string): v = 30
...
解决方案
我会使用列表理解(这样你就可以涵盖 的情况bool
)。
map_={int: 10, bool: 20, str: 30}
type_map=lambda x: [map_.get(el) for el in map_.keys() if isinstance(x, el)]
t=4
print(type_map(t))
# [10]
t=True
print(type_map(t))
# [10, 20]
t="txt"
print(type_map(t))
# [30]
t=5.3
print(type_map(t))
# []
或者将其减少到相关部分(IMO):
map_={bool: 20, int: 10, str: 30} # notice order change
type_map=lambda x: ([map_.get(el) for el in map_.keys() if isinstance(x, el)]+[None])[0]
t=4
print(type_map(t))
# 10
t=True
print(type_map(t))
# 20
t="txt"
print(type_map(t))
# 30
t=6.7
print(type_map(t))
# None
推荐阅读
- python - 如何计算word2vec中的差异向量
- python - 没有 Pandas 的 CSV 分组
- python-3.x - 有没有办法使用 api 编辑交叉表引用?
- c# - 键盘挂钩有时无法检测到条码扫描仪输入
- java - 如何比较来自多个流的结果并返回最高结果
- python - 使用 TLS 保护 Dask 连接的问题
- docker - Jenkins-Run Docker:复制失败:stat /var/lib/docker/tmp/docker-builder ...:没有这样的文件或目录
- json - 如何在不知道其 GroupVersionKind 的情况下将 AdmissionRequest.Raw 对象反序列化为 Kubernetes 对象?
- python - 如何修复我的代码以解决 config.py 中的此语法错误?
- c# - 如何触发 @Html.TextBoxFor() 中的隐藏