确定哪个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
就是我希望能完成甚至可能吗?
谢谢
答
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语句列表。
我甚至不明白你的目标是什么。 – frlan
不知道你想要什么。但是如果它打印出“if语句之一被触发”,那么清楚地说明是否触发了语句。如果它没有打印任何东西,那么显然它不符合if语句的条件,因此它跳到else语句并且没有打印任何东西。 – Wright
非常冒险的方式是使用列表理解分别评估语句。然后你可以找到列表中的哪一个元素是'真',这会告诉你哪一个是我猜的。不过,这是一种非常笨重的方法。即'x = [],x.append(string =='hello')','x.append(string =='3')'然后'x.index(True)'? – Henry