Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python False或None vs.None或False [20]中的:打印无或假 ------->打印(无或错误) 假的 在[21]中:打印错误或无 ------->打印(错误或无) 没有一个_Python_Boolean Logic - Fatal编程技术网

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