In [20]: print None or False
-------> print(None or False)
False
In [21]: print False or None
-------> print(False or None)
None
这种行为让我感到困惑。有人能解释一下为什么会这样发生吗?我本以为它们会表现得一样。
In [20]: print None or False
-------> print(None or False)
False
In [21]: print False or None
-------> print(False or None)
None
这种行为让我感到困惑。有人能解释一下为什么会这样发生吗?我本以为它们会表现得一样。
x or y
表达式的值取决于 x
的真假,如果 x
为真,则结果为 x
,否则为 y
。
需要注意的是上述句子中的 "true" 和 "false" 是指 "truthiness",并不是固定值 True
和 False
。一个 "true" 值会使得 if
语句执行成功;而一个 "false" 值则会导致失败。"false" 值包括 False
、None
、0
和 []
(空列表)。
None != False
的结果是True
? - Reloadertruthiness = bool
,然后 truthiness(None) == truthiness(False)
→ True
。 - martineau你必须意识到在Python中,True
、False
和None
都是单例对象,这意味着存在且只能存在一个单例对象的实例,因此称为单例。此外,您不能修改单例对象,因为它的状态已经确定,如果我可以使用那个短语的话。
现在,让我解释一下这些Python单例对象的使用方式。
假设有一个名为foo
的Python对象,它具有值None
,那么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
需要使用 ==
。避免使用 if foo == None
,只使用 if foo is None
。此外,避免使用 if foo != None
,只使用 if foo is not None
。
None
时使用 if foo
或 if not foo
,则可能会导致代码中的潜在错误。因此,不要以这种方式检查潜在的 None
值。通过上述方法检查它,即 if foo is None
或 if foo is not None
,这非常重要。一定要遵循 Python 专家共享的最佳实践。
True
是 1
,False
是 0
。1
表示真值(truthy value),并且我们有整数 0
表示假值(falsy value)。然而,使用 True
代替 1
更易于理解和人性化,使用 False
代替 0
更易于理解和人性化。
bool
类型(即 True
和 False
)是 int
类型的子类型。因此,如果使用类型提示,并注释函数/方法返回一个 int
或 bool
(即 -> int | bool
或 -> Union[int, bool]
),那么 mypy(或任何其他静态类型检查器)将无法正确确定此类函数/方法的返回类型。这是需要注意的事情。这方面没有解决办法。if foo不是None的情况下
,只需执行if foo
:请注意,if foo
并不等同于检查None
!if
语句首先将其表达式转换为bool
,因此如果foo == 0
,则if foo
将失败。 - Norriusdef fun(foo: str = None): if foo: bar
。现在,如果有人传入一个空字符串会发生什么?如果在你的逻辑中,空字符串与None不同,则可能不是期望的结果。 - NorriusNone
(因为所有Python函数都隐式地返回None
)。 - Boštjan Mejakif foo
或 if not foo
时可能会出现潜在的错误。使用 if foo is not None
或 if foo is None
表示Python最佳实践。 - Boštjan Mejakor
和and
短路。在逻辑or
操作中,如果任何参数为真,则整个操作将为真,并且不需要评估其他内容; Python会立即返回“true”值。如果完成而没有任何内容为真,则返回它处理的最后一个参数,这将是一个“false”值。
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
从布尔值的角度来看,它们的行为相同,都返回一个等于false的值。
or
只是“重复使用”它所得到的值,如果左侧的值为true,则返回左侧的值,否则返回右侧的值。
Condition1 or Condition2