哪个在python中更好?

时间:2014-06-05 06:42:04

标签: python conditional-statements

我在python中使用了一些条件语句,它们给出了相同的结果。我想知道哪个更好,它们之间的性能和逻辑有什么不同。

案例1:

if a and b and c:
    #some action

VS

if all( (a, b, c) ):
    #some action

案例2:

if a or b or c:
    #some action

VS

if any( (a, b, c) ):
    #some action

案例3:

if not x in a:
    #some action

VS

if x not in a:
    #some action

在上述情况下,我想知道性能和逻辑的差异以及首选方式。

1 个答案:

答案 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:,因为样式指南是神圣的