当我必须编写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')):
在我回顾我的代码并进行更改之前,我想询问知识渊博的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.
答案 0 :(得分:1)
any()
和all()
不会以相同的方式短路;所有元素都将被评估。
此外,any()
和all()
只返回布尔值,并且不会合并为or
和and
。