为什么在 python 中涉及 np.NaN 的逻辑 and/or 操作中顺序很重要?
Why does order matter in Logical and/or operation involving np.NaN in python?
np.NaN 的布尔值是 True。那么为什么 and/or 操作在 python.
中表现得如此随机
bool(np.nan) == True
如果 True or np.nan
的计算结果为 True
那么为什么 np.nan or True
的计算结果为 nan
?而这对于 and 操作是完全相反的:
True and np.nan
是 nan
而 np.nan and True
是 True
.
这是由于解释器使用 and
/or
:
计算表达式的方式
or
表达式:
如果第一个操作数是 True
或等于 True
,则不计算第二个操作数并返回第一个操作数的值。
如果第一个操作数是False
或等于False
,则计算并返回第二个操作数
示例:
True or np.nan
: bool(True)
is True
, therefore return True
np.nan or True
: bool(np.nan)
is True
, therefore return np.nan
False or np.nan
: bool(False)
is False
, therefore return np.nan
and
表达式:
如果第一个操作数是False
或等于False
,则不计算第二个操作数并返回第一个操作数的值
如果第一个操作数是True
或等于True
,则计算并返回第二个操作数
示例:
True and np.nan
: bool(True)
is True
, therefore return np.nan
np.nan and True
: bool(np.nan)
is True
, therefore return True
False and np.nan
: bool(False)
is False
, therefore return False
np.NaN 的布尔值是 True。那么为什么 and/or 操作在 python.
中表现得如此随机bool(np.nan) == True
如果 True or np.nan
的计算结果为 True
那么为什么 np.nan or True
的计算结果为 nan
?而这对于 and 操作是完全相反的:
True and np.nan
是 nan
而 np.nan and True
是 True
.
这是由于解释器使用 and
/or
:
or
表达式:如果第一个操作数是
True
或等于True
,则不计算第二个操作数并返回第一个操作数的值。如果第一个操作数是
False
或等于False
,则计算并返回第二个操作数示例:
True or np.nan
:bool(True)
isTrue
, therefore returnTrue
np.nan or True
:bool(np.nan)
isTrue
, therefore returnnp.nan
False or np.nan
:bool(False)
isFalse
, therefore returnnp.nan
and
表达式:如果第一个操作数是
False
或等于False
,则不计算第二个操作数并返回第一个操作数的值如果第一个操作数是
True
或等于True
,则计算并返回第二个操作数示例:
True and np.nan
:bool(True)
isTrue
, therefore returnnp.nan
np.nan and True
:bool(np.nan)
isTrue
, therefore returnTrue
False and np.nan
:bool(False)
isFalse
, therefore returnFalse