np.NaN的布尔值为True。那么为什么和/或操作在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
。
答案 0 :(得分:1)
这是由于口译员使用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