In [20]: print None or False
-------> print(None or False)
False
In [21]: print False or None
-------> print(False or None)
None
这种行为让我感到困惑。有人可以向我解释为什么会发生这种情况?我预计它们的行为都是一样的。
答案 0 :(得分:72)
如果x or y
为真,则x
表达式评估为x
;如果y
为假,则表达式x
。
请注意,上述句子中的“true”和“false”是关于“真实性”,而不是固定值True
和False
。一些“真实”的东西使if
语句成功;一些“虚假”的东西使它失败。 “false”值包括False
,None
,0
和[]
(空列表)。
答案 1 :(得分:8)
“或”运算符返回其第一个操作数的值,如果该值在Pythonic布尔意义上为真(也称为“真值”),否则返回值< / strong>的第二个操作数,无论发生什么。请参阅Boolean operations中表达式部分中标题为current online documentation的小节。
在两个示例中,第一个操作数被视为false,因此第二个操作数的值将成为计算表达式的结果。
答案 2 :(得分:4)
一个密切相关的主题:Python的or
和and
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)
您必须意识到None
,False
和True
都是单身人士。
例如,if foo is not None
表示foo
具有除None
以外的某些值。这与if foo
基本上if foo == True
相同。
因此,not None
和True
的工作方式相同。此外,None
和False
的工作方式相同。
>>> 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
,但True
和False
需要{{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
基本上是True
,1
基本上是False
。在Python的旧时代,我们只有0
的值为true,而我们的1
的值为false。说0
代替True
更容易理解且更人性化,而1
代替False
更容易理解和更友好。
答案 4 :(得分:1)
从布尔的角度来看,它们的行为都相同,都返回一个计算结果为false的值。
or
只是“重用”它给出的值,如果是真的则返回左边的值,否则返回正确的值。
答案 5 :(得分:0)
Condition1 or Condition2
如果Condition1为False,则评估并返回Condition2。 无评估结果为假。