实际上该
any()功能等于以下功能:
def any(iterable): for element in iterable: if element: return True return False
这就像您的第二个函数,但是由于
any()返回本身是布尔值,因此您无需检查结果然后返回新值,所以性能的差异是因为您实际上使用了冗余返回和
if条件,还调用了
any内部另一个函数。
因此,
any这里的优点是您不需要用另一个函数包装它,因为它可以为您完成所有事情。
就像@interjay在评论中提到的那样,似乎我最想念的最重要的原因是您将生成器表达式传递给了
any()它,它不会立即提供结果,并且由于它按需产生结果,因此它会做额外的工作。
基于PEP 0289-生成器表达式
生成器表达式的语义等同于创建匿名生成器函数并对其进行调用。例如:
g = (x**2 for x in range(10))print g.next()
等效于:
def __gen(exp): for x in exp: yield x**2g = __gen(iter(range(10)))print g.next()
因此,如您所见,每次python要访问下一个项目时,它都会调用生成器的
iter函数和
next方法,最后结果是
any()在这种情况下使用它是过分的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)