Почему Пилинт считает, что сравнивать с нулем плохо? - PullRequest
1 голос
/ 30 июня 2019

Необязательное расширение comparetozero для pylint проверяет любое сравнение с 0 и отмечает его. Мне непонятно, почему это плохо.

В соответствии с строкой документации модуля comparetozero,

В большинстве случаев вам следует использовать тот факт, что целые числа со значением 0 являются ложными.

Исключением из этого правила является случай, когда 0 разрешен в программе и имеет значение, отличное от None!

Что именно это значит?

Мое понимание вышеизложенного состоит в том, что это означает, что вы не должны делать что-то вроде

def return_false():
    return False

if return_false() == 0:
    pass

потому что это злоупотребляет ложной природой 0, но это нормально делать

if foo % 4 == 0:
    pass

потому что вы сравниваете два целых числа, чтобы увидеть, равны ли они буквально нулю.

Если мое понимание верно, то лучше ли делать конкретные # pylint: disable заявления для случаев, когда вы буквально проверяете, равно ли значение нулю, или как?

1 Ответ

1 голос
/ 30 июня 2019

Питонический способ сравнения - использовать неявные логические проверки или истинные значения. Например,

some_val = 0
if some_val == 0: # non-pythonic way to check

vs 

if not some_val: # 0 is false for python and hence a boolean way is easier to read

Лучшая практика кодирования - говорить «Если это не так», а истинное значение переменной основано на различных формах, таких как пустой список или пустая строка

Итак, в целом, следующее звучит лучше:

some_str = ''
if not some_str: # better than if some_str == ''

some_number = 0
if not some_number: # better than if some_number == 0

some_list = []
if not some_list: # better than if len(some_list) == 0
...