Почему порядок имеет значение в логическом и / или операции с участием np.NaN в Python? - PullRequest
0 голосов
/ 05 июня 2018

Значение Bool для 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.

1 Ответ

0 голосов
/ 05 июня 2018

Это связано с тем, что интерпретатор оценивает выражения с помощью 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

...