`any()`vs在`if`语句中多次使用`或`:行为上的差异

时间:2015-03-12 05:06:57

标签: python-3.x

当我必须编写if评估为True的语句时,如果任何指定的条件评估为True,我习惯在我的条件之间使用许多or中缀。 / p>

示例:

if customer.value > 5000 or \ customer.orders > 50 or \ customer.join_at < datetime(2010,10,12) or \ customer.name == 'Hal':

最近,我意识到我可以这样做。

if any((customer.value > 5000, customer.orders > 50, customer.join_at < datetime(2010,10,12), customer.name == 'Hal')):

其中,IMO,眼睛更容易。

在我回顾我的代码并进行更改之前,我想询问知识渊博的StackOverflow社区是否存在任何性能差异或两种方法之间的其他警告。 同样适用于and vs all

的多种用途

如果我使用生成器而不是元组,会发生什么。是否会循环直到引发StopIteration?

示例:

def g():
    yield isinstance('0', str)
    yield isinstance(0, str)
    yield isinstance('abc', str)

mygen = g()

any(boolean for boolean in mygen)
# returns True, but does it go through the whole generator.

1 个答案:

答案 0 :(得分:1)

如果使用诸如问题中的元组之类的序列,

any()all()不会以相同的方式短路;所有元素都将被评估。

此外,any()all()只返回布尔值,并且不会合并为orand