Python:False或None vs. None或False

时间:2010-10-12 12:29:55

标签: python boolean-logic

In [20]: print None or False
-------> print(None or False)
False

In [21]: print False or None
-------> print(False or None)
None

这种行为让我感到困惑。有人可以向我解释为什么会发生这种情况?我预计它们的行为都是一样的。

6 个答案:

答案 0 :(得分:72)

如果x or y为真,则x表达式评估为x;如果y为假,则表达式x

请注意,上述句子中的“true”和“false”是关于“真实性”,而不是固定值TrueFalse。一些“真实”的东西使if语句成功;一些“虚假”的东西使它失败。 “false”值包括FalseNone0[](空列表)。

答案 1 :(得分:8)

“或”运算符返回其第一个操作数的,如果该值在Pythonic布尔意义上为真(也称为“真值”),否则返回值< / strong>的第二个操作数,无论发生什么。请参阅Boolean operations表达式部分中标题为current online documentation的小节。

在两个示例中,第一个操作数被视为false,因此第二个操作数的值将成为计算表达式的结果。

答案 2 :(得分:4)

一个密切相关的主题:Python的orand short-circuit。在逻辑or操作中,如果任何参数为真,那么整个事情都将为真,并且不需要评估任何其他参数; Python立即返回“true”值。如果它完成并且没有任何内容为真,它将返回它处理的最后一个参数,这将是一个“假”值。

and是相反的,如果它看到任何错误的值,它将立即以“false”值退出,或者如果它通过它,则返回最终的“true”值。

>>> 1 or 2 # first value TRUE, second value doesn't matter
1
>>> 1 and 2 # first value TRUE, second value might matter
2
>>> 0 or 0.0 # first value FALSE, second value might matter
0.0
>>> 0 and 0.0 # first value FALSE, second value doesn't matter
0

答案 3 :(得分:4)

您必须意识到NoneFalseTrue都是单身人士。

例如,if foo is not None表示foo具有除None以外的某些值。这与if foo基本上if foo == True相同。

因此,not NoneTrue的工作方式相同。此外,NoneFalse的工作方式相同。

>>> foo = not None
>>> bool(foo)
True
>>> foo = 5  # Giving an arbitrary value here
>>> bool(foo)
True

>>> foo = None
>>> bool(foo)
False
>>> foo = 5  # Giving an arbitrary value here
>>> bool(foo)
True

在编码时要意识到并注意的重要一点是,在比较两件事时,None需要is,但TrueFalse需要{{1 }}。避免使用==,只执行if foo == None并避免if foo is None,并且只执行if foo != None。如果是if foo is not None,只需执行if foo is not None。如果是if foo,只需执行if foo is None

注意:if not foo基本上是True1基本上是False。在Python的旧时代,我们只有0的值为true,而我们的1的值为false。说0代替True更容易理解且更人性化,而1代替False更容易理解和更友好。

答案 4 :(得分:1)

从布尔的角度来看,它们的行为都相同,都返回一个计算结果为false的值。

or只是“重用”它给出的值,如果是真的则返回左边的值,否则返回正确的值。

答案 5 :(得分:0)

Condition1 or Condition2

如果Condition1为False,则评估并返回Condition2。 无评估结果为假。