是否有更多Pythonic方法来实现此逻辑:
res = func()
if res is not None: # res is either True, False, something else
if res is True:
#do something # res is True
elif res is False:
#do something else # res is False
else:
#do something else2 # res is not in [True,False]
else:
#failed # res is None
答案 0 :(得分:6)
不,你已经覆盖了它。
一般情况下,不要使用is True
或is False
,如果必须使用三态布尔值,请使用:
if res is None:
# handle None case
elif res:
# handle true case
else:
# handle false case
e.g。把负担放在开发者身上以正确使用三态。
如果函数需要传递更多状态,则不应使用布尔值;在这种情况下,切换到使用enum value。
答案 1 :(得分:1)
您可以创建一个函数来将值映射到相应的函数。类似的东西:
# Function to map values
def do_something(res):
return {
None: func_1, # Each `res` mapped to corresponding function
True: func_2,
False: func_3,
}.get(res, func_4)
do_something(res)()
# ^ call the function returned by `do_something()`
上述代码的等效代码可以根据您提到的逻辑 编写:
if res is not None:
if res is True:
func_2()
elif res is False:
func_3()
else:
func_4()
else:
func_1()
答案 2 :(得分:0)
if res is None:
#do something
elif res:
#do something else
elif not res:
#do something else 2