在一个'if'语句中评估多个变量?

时间:2012-02-29 18:30:44

标签: python if-statement

假设我有一堆TrueFalse变量。我想在一个if语句中评估一组这些变量,看它们是否都是False,如下所示:

if var1, var2, var3, var4 == False:
    # do stuff

除此之外不起作用。我知道我可以这样做:

if var1 == False and var2 == False and var3 == False and var4 == False:
    # do stuff

但这相当丑陋 - 特别是如果这些if语句将在我的代码中发生很多。有没有什么方法可以使用更清晰的语法进行此评估(如第一个示例)?

8 个答案:

答案 0 :(得分:34)

你应该never test a boolean variable with == True (or == False)。相反,要么写:

if not (var1 or var2 or var3 or var4):

或使用any(在相关问题中使用其表兄all):

if not any((var1, var2, var3, var4)):

或使用Python的transitive comparisons

if var1 == var2 == var3 == var4 == False:

答案 1 :(得分:7)

这个怎么样:

# if all are False
if not any([var1, var2, var3, var4]):
    # do stuff

或:

# if all are True
if all([var1, var2, var3, var4]):
    # do stuff

这些都很容易阅读,因为它们只是简单的英语。

答案 2 :(得分:3)

if all(not v for v in (var1, var2, var3, var4)):

这是“所有虚假”分支。对于“全部为真”,只需if all((var2, var2, var3, var4)):

答案 3 :(得分:3)

你可以这样做:

if var1 and var2 and var3 and var4:
     do stuff

答案 4 :(得分:1)

自定义功能怎么样?

function ListObjectsEqualTo(myList, toValue):
    for i in myList:
        if i != toValue:
            return False
    return True

现在你可以使用它了

if ListObjectsEqualTo((var1, var2, var3, var4), False):
    # do stuff

答案 5 :(得分:1)

你可以这样做:

if var1 == var2 == var3 == var4 == False:
  do_stuff()

但是,如果变量的计算结果为true或false,您也可以这样做:

if var1 and var2 and var3 and var4:
  do_stuff()

或者

if all([var1, var2, var3, var4]):
  do_stuff()

答案 6 :(得分:1)

>>> not any([False, False])
True
>>> not any([True, False])
False
>>> 

使用any()关键字。

答案 7 :(得分:0)

您可以使用if var1 == var2 == var3 == False: