Python False或None vs.None或False [20]中的:打印无或假 ------->打印(无或错误) 假的 在[21]中:打印错误或无 ------->打印(错误或无) 没有一个
这种行为使我困惑。有人能解释一下为什么会这样吗?我希望它们的行为相同。如果Python False或None vs.None或False [20]中的:打印无或假 ------->打印(无或错误) 假的 在[21]中:打印错误或无 ------->打印(错误或无) 没有一个,python,boolean-logic,Python,Boolean Logic,这种行为使我困惑。有人能解释一下为什么会这样吗?我希望它们的行为相同。如果x为真,表达式x或y的计算结果为x,如果x为假,表达式y的计算结果为 请注意,上面句子中的“真”和“假”指的是“真实性”,而不是固定值true和false。如果语句成功,则“真”的东西会生成一个;一些“错误”的东西会让它失败。“false”值包括false、None、0和[](空列表)。从布尔值的角度来看,它们的行为相同,都返回一个计算结果为false的值 或仅“重用”给定的值,如果为真,则返回左值,否则返回右值 Cond
x
为真,表达式x或y
的计算结果为x
,如果x
为假,表达式y
的计算结果为
请注意,上面句子中的“真”和“假”指的是“真实性”,而不是固定值true
和false
。如果
语句成功,则“真”的东西会生成一个;一些“错误”的东西会让它失败。“false”值包括false
、None
、0
和[]
(空列表)。从布尔值的角度来看,它们的行为相同,都返回一个计算结果为false的值
或
仅“重用”给定的值,如果为真,则返回左值,否则返回右值
Condition1 or Condition2
如果条件1为False,则求值并返回条件2。
None求值为False。如果第一个操作数的值在Python布尔意义上为真(也称为“真”),则或运算符返回该操作数第一个操作数的值,否则返回第二个操作数的值,不管它是什么。请参阅中有关表达式的章节中标题为的小节
在两个示例中,第一个操作数都被视为false,因此第二个操作数的值成为计算表达式的结果。一个密切相关的主题:Python的或和和。在逻辑或
操作中,如果任何参数为true,则整个过程都为true,不需要计算任何其他参数;Python立即返回“true”值。如果它完成并且没有任何值为true,则返回它处理的最后一个参数,该参数将为“false”值
和
则相反,如果它看到任何假值,它将立即使用该“假”值退出,或者如果它完成了所有操作,则返回最终的“真”值
您必须意识到None
、False
和True
都是单例
例如,如果foo不是None
意味着foo
具有除None
以外的值。这与只使用if foo
是一样的,基本上是if foo==True
因此,notnone
和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
需要=
。如果foo==None,则避免;如果foo=None,则仅执行;如果foo!=无
,如果foo不是None,则只执行。对于如果foo不是None
,只需执行如果foo
。对于如果foo是None
,只需执行如果不是foo
注意:True
基本上是1
,False
基本上是0
。在Python的旧时代,只有1
表示值true,而0
表示值false。说True
比说1
更容易理解和人性化,说False
比说0
更容易理解和人性化,LOL是最近创造的术语的创造性应用,但在这里相当合适,尽管它的起源令人怀疑。@martineau:从这个技术意义上讲,它是一个更古老的术语。科尔伯特比程序员更有可能将其纳入主流,但他不是唯一的来源。是的,显然是一个更古老的术语。在维基词典的词源上,它们表明“1824年首次认证”。我从未见过@RichieHindle在技术意义上的使用——尽管它在这种情况下非常有意义。如果“false”值包括false、None、0和[](空列表),那么为什么None!=False
的计算结果为True
?@Reloader:仅仅因为两个值为False并不意味着它们相等。Python中[“Boolean”操作(即:和/或运算符)]()的可能重复@SilentGhost:如果没有一个被认为是False,为什么它会返回None而不是False?应用于两个假值的OR不应该返回false吗?@SilentGhost:是的,我不明白,这就是为什么我这么问。@SilentGhost它令人困惑,因为很明显,官方文档描述的内容与任何逻辑OR运算符的直观预期不同(即操作数的顺序无关)。记录的行为不一定意味着正确的行为…;-)严格地说,Python不会缩短“or”和“and”操作,因为它不会强制求值为True或False,而是返回参数,以便用户可以应用对象的真实性。从这个意义上说,RichieHindie的答案非常清楚:对于or,如果第一个参数的计算结果为true,则返回第一个参数,否则返回第二个参数;对于和,它是转换,如果第一个值为true,则返回第二个值,否则返回第一个值。“如果if foo不是None
,只需执行if foo
”:请注意if foo
与检查None
不是一回事!if
语句首先将其表达式转换为bool
,因此,如果foo==0
,if foo
将失败。None、False或0与使用逻辑相同。编码时只需遵循相同的逻辑即可。如果您给一个变量的起始值为None,那么请在源代码的后面用“If foo is None”检查这个值,但这就是basicall
>>> 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