我想知道在if语句中使用元组而不是单独的表达式是否是一个好习惯。
is_dog = True
is_brown = False
我想这样做:
if (is_dog, is_brown):
do_something()
而不是这样:
if is_dog or is_brown:
do_something()
在这种情况下,最佳做法是什么? 谢谢
答案 0 :(得分:4)
这里发生了一些事情:
您正在使用元组作为if
的分支值。谓词的真实性仅表示谓词是否为空,而其内容无关:
assert bool(tuple()) is False
assert bool((False, )) is True
第二,如果您事先知道元组中的项数,通常使用or
和and
更具可读性,就像您提到的那样:
if is_dog or is_cat:
do_something()
最后,您可以对任意数量的值使用any
:
values = [is_dog, is_cat, ... more]
if any(values):
do_something()
答案 1 :(得分:3)
这是不是的好习惯,看看是否其中一个布尔值是True
:
if (False,False):
print("it does not do what you think it does")
输出:
it does not do what you think it does
请参见python truth value testing:任何非空元组都是True
-您的
正确的方法是:
if a or b:
pass
对于倍数,您可以使用any()
:
if any(x for x in (False, True)):
pass # will enter here if any part of the tuple is True
else:
pass # will enter here if no part of the tuple is True