Должен ли я использовать 'not x' или 'x == 0', чтобы проверить, равен ли результат операции modulo в python
Я действительно думал, что найду что-нибудь на этом, и, возможно, это там, и я пропустил его. Если это так, я извиняюсь, и я закрою вопрос.
Я проверяю, возвращает ли операция по модулю результат нуля, и мне было интересно, какая из них «лучше» (более пифоновая, быстрее и т. Д.):
if not count % mod
OR if count % mod == 0
Думаю, я должен уточнить и сказать, что у меня очень хорошее понимание правдивых и ложных ценностей, я просто хотел знать, есть ли конкретная причина использовать один над другим. Особенно учитывая, что это всегда будет число (иначе оператор %
будет бросать TypeError).
- Автоматически добавлять ключ к Python dict
- Использование глобальных переменных в Python exec
- Почему csv.reader не считается классом?
- Как продолжить после команды return в python?
- Случайное генерирование математических вопросов
В общем случае риск использования вместо 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
- Как я могу открыть ряд файлов (PNG) из указанного каталога (случайно) с помощью Python?
- Как изменить родительский атрибут в подклассе python
- Идиома Python для «Попробуйте, пока не будет создано исключение»
- Итерировать список как пару (текущий, следующий) в Python
- Различия между Go и Cython
- Как получить список всех целых точек в n-мерном кубе с помощью python?
- Интерактивный ввод в python
- Python Запись байтов в файл
- Как перебирать все заголовки запросов в webapp RequestHandler с помощью python?
- Почему у Python нет статических переменных?
- Список домашних каталогов без абсолютного пути