Должен ли я использовать 'not x' или 'x == 0', чтобы проверить, равен ли результат операции modulo в python

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

Я проверяю, возвращает ли операция по модулю результат нуля, и мне было интересно, какая из них «лучше» (более пифоновая, быстрее и т. Д.):

if not count % mod OR if count % mod == 0

Думаю, я должен уточнить и сказать, что у меня очень хорошее понимание правдивых и ложных ценностей, я просто хотел знать, есть ли конкретная причина использовать один над другим. Особенно учитывая, что это всегда будет число (иначе оператор % будет бросать TypeError).

В общем случае риск использования вместо not x вместо x==0 заключается в том, что вы можете сопоставить другой тип значения, который также является ложным (например, None или пустой список).

В этом случае, поскольку x должно быть числом, безопасно использовать not x для обозначения x==0 . Используйте то, что кажется более читаемым.

Для меня первая версия выглядит немного странно, потому что я ожидаю, что результаты арифметической операции будут обрабатываться как число, поэтому я предпочел бы вторую версию. Но ложность есть для удобства, и есть много обстоятельств, которые имеет смысл использовать.

От Дзен Питона

Явный лучше, чем неявный.

В вашем случае вы явно проверяете целочисленное значение, результат оператора modulo % , и в этом случае вы должны проверить значение == 0 , а не значения false.

Обратите внимание на различия:

if not foo не было верно для foo = 0 и для foo = "" и для foo = None

if foo == 0 будет true для foo = 0 но не для foo = "" и foo = None

Вы можете рассмотреть эти два случая:

 count = 15 mod = 5 print count % mod == 0 # True print not count % mod # True 

Все кажется прекрасным. Итак, давайте теперь сломаем этот код:

 count = '%s' mod = '' print count % mod == 0 # False print not count % mod # True 

Как вы можете видеть – ваши два случая не эквивалентны. Это может быть что-то стоящее, чтобы принять во внимание.

Я бы сказал, используйте x==0 как not x также будет оценивать true, если x = False