如何在python中避免多个平坦的条件?

时间:2017-01-06 08:35:25

标签: python if-statement methods

考虑一下代码段:

def check_conditions(range_of_numbers):
#method returns a list containing messages 
    list1 = []
    if condition1:
       list1.append("message1")
    if condition2:
       list1.append("message2")
    if condition3:
       list1.append("message3")
    try:
       for i in range_of_numbers:
           int(i)
    except ValueError:
        list1.append("message4")
    return message

我希望只有满足条件才能在with消息中列出一个列表。我不使用多个if,因为它增加了代码复杂性,每次添加新参数时,我最终会添加一个新的if条件。

2 个答案:

答案 0 :(得分:3)

只需循环条件/消息,例如:

for condition,message in ((condition1,"message1"),(condition2,"message2"),(condition3,"message3")):
    if condition:
       list1.append(message)

如果条件是排他性的,请考虑在一个条件匹配时添加break

列表理解版本(更多" pythonic"但不可能在第一次条件匹配时中断):

list1 = [message for condition,message in ((condition1,"message1"),(condition2,"message2"),(condition3,"message3")) if condition]

答案 1 :(得分:1)

作为Jean-FrançoisFabre的补充。

满足所有条件

tmp = [message for condition, message in ((condition1, "message1"),
       (condition2, "message2"),(condition3, "message3")) if condition]

条件是独占的

tmp = next((message for condition, message in ((condition1, "message1"),         
           (condition2, "message2"), (condition3, "message3")) if condition), None)