np 的布尔值。NaN 是真的。那么为什么和/或操作在 python 中表现得如此随机。
bool(np.nan) == True
如果True or np.nan
评估为True
那么为什么np.nan or True
评估为nan
?对于和操作,这是完全相反的:
True and np.nan
nan
,而np.nan and True
True
。
这是由于解释器使用and
/or
计算表达式的方式:
-
or
表达式:如果第一个操作数
True
或等价于True
,则不计算第二个操作数,并返回第一个操作数的值。如果第一个操作数
False
或等效于False
,则计算并返回第二个操作数例子:
True or np.nan
:bool(True)
True
,因此返回True
np.nan or True
:bool(np.nan)
是True
,因此返回np.nan
False or np.nan
:bool(False)
False
,因此返回np.nan
-
and
表达式:如果第一个操作数
False
或等效于False
,则不计算第二个操作数,并返回第一个操作数的值如果第一个操作数
True
或等效于True
,则计算并返回第二个操作数例子:
True and np.nan
:bool(True)
是True
,因此返回np.nan
np.nan and True
:bool(np.nan)
是True
,因此返回True
False and np.nan
:bool(False)
是False
,因此返回False