检查无,假,真

时间:2017-01-10 10:54:30

标签: python python-2.7

是否有更多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

3 个答案:

答案 0 :(得分:6)

不,你已经覆盖了它。

一般情况下,不要使用is Trueis 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