假设我有一堆True
或False
变量。我想在一个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语句将在我的代码中发生很多。有没有什么方法可以使用更清晰的语法进行此评估(如第一个示例)?
答案 0 :(得分:34)
你应该never test a boolean variable with == True
(or == False
)。相反,要么写:
if not (var1 or var2 or var3 or var4):
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: