【发布时间】:2015-03-22 18:06:28
【问题描述】:
偶尔,我想检查一下这个问题:
a = 'my string'
if 'string1' in a or 'string2' in a or 'string3' in a ... or 'stringN' in a:
[[do something]]
else:
[[something else]]
假设我知道'string1' in a 有 90% 的机会计算为 True。如果'string2' in a 在这种情况下'string1' in a 是True,Python 还会评估吗?还是在技术上写起来更有效率:
if 'string1' in a:
[[do something]]
elif 'string2' in a:
[[do something]]
elif 'string3' in a:
[[do something]]
...
elif 'stringN' in a:
[[do something]]
else:
[[something else]]
【问题讨论】:
-
您的第二个代码与第一个代码非常不同。他们不这样做。
-
他们没有?每个
elif子句都是对同一事物的重复调用。您将如何达到他们不做同样事情的状态? -
更具可读性的版本:
strings = ['string1', 'string2', 'string3', ..., 'stringN']然后是if any(s in a for s in strings):。效果相同(短路)。 -
或者使用
any((True if s in a for s in strings))这样生成器可以在any中早点返回,我想。糟糕,n/m 没有看到您正确使用any。 -
@prpl.mnky.dshwshr 我认为他在这里将
[[do something]]作为占位符。在实际情况下,它会做不同的事情,因此,为任何语句设置特殊情况与将它们放在一起(如第一种情况)是不一样的。
标签: python conditional-statements boolean-logic