确定哪个if语句被触发? (python 2.7)

问题描述:

我将如何确定哪个语句被触发?确定哪个if语句被触发? (python 2.7)

例子:

string = "hello" 
if len(string) > 10: 
    print("over 10") 

elif string == "hello": 
    print("String is equal to hello") 

else: 
    pass 

我想重写它,以便其更“Python化”,我已经得到了这一步

string = "hello" 
if len(string) > 10 or string == "hello": 
    print("one of the if statements was triggered") # I want to determine which was triggered 
else: 
    pass 

就是我希望能完成甚至可能吗?

谢谢

+0

我甚至不明白你的目标是什么。 – frlan

+0

不知道你想要什么。但是如果它打印出“if语句之一被触发”,那么清楚地说明是否触发了语句。如果它没有打印任何东西,那么显然它不符合if语句的条件,因此它跳到else语句并且没有打印任何东西。 – Wright

+0

非常冒险的方式是使用列表理解分别评估语句。然后你可以找到列表中的哪一个元素是'真',这会告诉你哪一个是我猜的。不过,这是一种非常笨重的方法。即'x = [],x.append(string =='hello')','x.append(string =='3')'然后'x.index(True)'? – Henry

IMO,你使用的if语句没有错。

但是,如果你要聪明一点,你可以使用的lambda的列表:

In [1]: string = 'Hello' 

In [2]: conditions = [lambda s: 'Length is > 10' if len(s) > 10 else None, 
    ...:    lambda s: 'String is "Hello"' if s == 'Hello' else None] 

conditions是匿名函数。它们返回一个描述条件的字符串,或者使用三元运算符返回None

这与您的if -statement略有不同,因为它测试全部的条件。

我们应用功能的字符串,过滤掉None值:

In [3]: results = [r for r in [c(string) for c in conditions] if r is not None] 

results是描述了适用于字符串条件字符串列表。

我们打印结果。

In [4]: for r in results: 
    ...:   print(r) 
    ...:   
String is "Hello" 

这当然很好地利用了Python提供的可能性。

如果你认为这个Pythonic是一个味道的问题。 :-)原始的if-语句较短,可能更易于阅读!特别是对于Python新手。

但是,如果你想测试很多条件,这可能是一个很好的方法,而不是一个巨大的 if语句列表。