Vir*_*liu 58 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
Run Code Online (Sandbox Code Playgroud)
这种行为让我很困惑.有人可以向我解释为什么会发生这种情况?我希望他们两个都表现得一样.
Ric*_*dle 81
表达式的x or y计算结果为xif x为true,或者yif x为false.
请注意,上述句子中的"真实"和"假"是在谈论"真实性",而不是固定值True和False.一些"真实"的东西使得一个if声明成功; 一些"虚假"的东西使它失败."假"值包括False,None,0和[](空单).
您必须意识到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
Run Code Online (Sandbox Code Playgroud)
实现并注意编码时的重要的事情是比较两件事情,当None需要is,但True和False需求==。避免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基本上是0。在Python的旧时代,我们只有1true 0值,而false值。这是更容易理解和人性化地说True,而不是1和更容易理解和人性化的说False不是0。
一个密切相关的主题:Python's orand and short-circuit。在逻辑or运算中,如果任何参数为真,则整个事物都为真,不需要评估其他任何参数;Python 立即返回该“真”值。如果它完成并且没有任何内容为真,它会返回它处理的最后一个参数,这将是一个“假”值。
and 相反,如果它看到任何假值,它会立即退出该“假”值,或者如果它全部通过,则返回最终的“真”值。
>>> 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
Run Code Online (Sandbox Code Playgroud)