为什么在 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.nannannp.nan and TrueTrue.

这是由于解释器使用 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