首页 > 解决方案 > 避免编写级联 if-then-else

问题描述

有没有办法让我在下面的代码不使用一堆 if-then-else?

if isinstance(t, int): v = 10
elif isinstance(t, bool): v = 20
elif isinstance(t, string): v = 30
...

标签: python

解决方案


我会使用列表理解(这样你就可以涵盖 的情况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

推荐阅读