Странное булево поведение: значение истинности массива с более чем одним элементом неоднозначно - PullRequest
0 голосов
/ 16 мая 2019

Я сбит с толку поведением следующего наблюдения

>>> t = numpy.array([1,2,3])
>>> type(t)
<class 'numpy.ndarray'>
>>> type(t) != numpy.ndarray
False
>>> type(t) == numpy.ndarray
True
>>> type(t) != numpy.ndarray or t == None
array([False, False, False])
>>> type(t) != numpy.ndarray or t != None
array([ True,  True,  True])

Последние 2 оператора, похоже, возвращают логический список, а не просто T / F из других операторов. Очевидно, что если мы хотим проверить, является ли объект пустым массивом, мы столкнемся с ошибкой ValueError из-за неоднозначности.

Почему так себя ведет?

1 Ответ

0 голосов
/ 16 мая 2019

or не возвращает логическое значение, возвращается один из его операндов ; таким образом, либо результат выражения его левой руки, либо его выражения правой руки (в зависимости от того, что будет правдивым первым). Если ваше левое выражение falsey , оно вычисляет и возвращает выражение правой руки. И t == None в массиве numpy возвращает массив значений.

Все эти тесты - плохая практика. Проверка типов, использующих isinstance, и равенство None, использование is None.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...