我在python中使用了一些条件语句,它们给出了相同的结果。我想知道哪个更好,它们之间的性能和逻辑有什么不同。
if a and b and c:
#some action
VS
if all( (a, b, c) ):
#some action
if a or b or c:
#some action
VS
if any( (a, b, c) ):
#some action
if not x in a:
#some action
VS
if x not in a:
#some action
在上述情况下,我想知道性能和逻辑的差异以及首选方式。
答案 0 :(得分:6)
案例1
来自https://docs.python.org/2/library/functions.html#all
所有(迭代)强>
如果iterable的所有元素都为真(或 如果iterable为空)。相当于:
def all(iterable): for element in iterable: if not element: return False return True
这意味着if a and b and c:
和if all( (a, b, c) ):
执行相同的操作(duh),但all()
涉及函数调用和循环,所以它的速度要慢一些,但实际上,只是一点点。
如果您只有几个变量(不超过3个)以保持可读性,我会说您使用if a and b and c:
,如果您有更多变量,我会all()
。
请记住:可读性几乎总是比轻微的性能提升更重要。
all()
和any()
可以将列表理解作为输入,这非常有用。
注意:all()
仅适用于Python 2.5 +
案例2
与案例1相同,真的。因为它几乎完全相同的功能
任意(可迭代)
如果iterable的任何元素为true,则返回True。如果 iterable为空,返回False。相当于:
def any(iterable): for element in iterable: if element: return True return False
注意:any()
仅适用于Python 2.5 +
案例3
来自http://legacy.python.org/dev/peps/pep-0008/#programming-recommendations
使用不是运营商而不是......是。虽然两个表达式在功能上是相同的,但前者更具可读性和首选。
您应该if x not in a:
使用if not x in a:
,因为样式指南是神圣的