Если нет x % y: сделайте что-нибудь


У меня есть вопрос о следующем утверждении в Python

if not x % y: 
    # do something

Увидев это в куске кода и экспериментируя, я обнаружил, что если значение по модулю равно нулю, то он пропустит код "сделать что-то".

Мой вопрос заключается в том, существует ли общее правило о том, если и если нет утверждений с подразумеваемыми условиями, и есть ли какие-либо хорошие ссылки на Python "трюки", подобные этому?

Я прошу прощения за широкий вопрос, но это бросило меня в петлю, когда я впервые увидел его. Я хотел бы научиться как можно большему количеству этих коротких трюков!
3 2

3 ответа:

  • None является ложным.
  • числа, которые не равны нулю, считаются истинными; 0 - ложными
  • строки с любым содержанием истинны; "" ложны
  • контейнеры с чем-либо в них истинны; [], (), и {} (и другие пустые контейнеры) являются ложными

Это можно переопределить в ваших собственных типах, определив __len__() или __nonzero__() (Последний называется __bool__() в Python 3). Вы даже можете определить, например, ноль, который оценивает как правда:

class trueint(int):
    def __nonzero__(self):
        return True
    __bool__ = __nonzero__    # Python 3

truezero = trueint(0)

if truezero:
    print("yep, this zero is true!")

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

В Python нет такого понятия, как "подразумеваемое условие"; есть истинные значения, и есть ложные значения.

Они ложны:

  • None
  • 0 (или любое число, равное ему)
  • пустые последовательности ('', u'', b'', [], ()), отображения ({}), или множества ({,})
  • объекты, возвращающие false из своего метода __nonzero__()
Все остальное должно считаться истинным, пока не доказано обратное.

Это поведение называется правдивостью в Python: http://www.udacity.com/wiki/CS258%20Truthiness%20in%20Python