Должны ли эти выражения оцениваться по-разному? - PullRequest
1 голос
/ 24 сентября 2011

Я был немного смущен, пока не нашел ошибку в своем коде. Я должен был изменить

a.matched_images.count #True when variable is 0

до

a.matched_images.count > 0 #False when variable is 0

Поскольку я быстро захотел узнать, есть ли у объекта какие-либо изображения, первый код будет выглядеть так, как на фотографии есть изображения, поскольку выражение оценивается как True, когда значение действительно ложно («нет изображений» / 0 изображений)

Правильно ли я понял это, и не могли бы вы ответить или прокомментировать, должны ли эти выражения принимать разные значения.

Ответы [ 3 ]

3 голосов
/ 24 сентября 2011

Какова природа count? Если это базовый номер Python, то if count совпадает с if count != 0. С другой стороны, если count является пользовательским классом, то ему необходимо реализовать либо __nonzero__, либо __len__ для Python 2.x, либо __bool__ или __len__ для Python 3.x. Если эти методы не определены, то каждый экземпляр этого класса считается True.

2 голосов
/ 24 сентября 2011

Не зная, что такое count, трудно ответить, но этот отрывок может быть вам полезен:.

Следующие значения считаются ложными:

  • нет

  • Ложная

  • ноль любого числового типа, например, 0, 0L, 0.0, 0j.

  • любая пустая последовательность, например, '', (), [].

  • любое пустое отображение, например, {}.

  • экземпляров пользовательских классов, если класс определяет __nonzero__() или __len__(), когда этот метод возвращает целое ноль или логическое значение False. [1]

Все остальные значения считаются истинными, поэтому объекты многих типов всегда верно.

1 голос
/ 24 сентября 2011
>>> bool(0)
False

Итак ... нет, если бы это был int, это не имело бы значения.Пожалуйста, отследите, распечатайте, что на самом деле является count 1003 *

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