Учитывая этот фрагмент кода:
from os import walk
files = []
for (dirpath, _, filenames) in walk(mydir):
# more code that modifies files
if len(files) == 0: # <-- C1801
return None
Я был встревожен Пилинтом с этим сообщением относительно строки с выражением if:
[pylint] C1801: Не используйте
len(SEQUENCE)
как значение условия
Правило C1801, на первый взгляд, показалось мне не очень разумным, а определение в справочном руководстве не объясняет, почему это это проблема. Фактически, он прямо называет его неправильным использованием.
len-as-condition (C1801): Не используйте
len(SEQUENCE)
в качестве значения условия Используется, когда Pylint обнаруживает неправильное использование len (последовательности) внутри условий.
Мои попытки поиска также не дали мне более глубокого объяснения. Я понимаю, что свойство длины последовательности можно лениво оценить и что __len__
можно запрограммировать на наличие побочных эффектов, но сомнительно, достаточно ли это достаточно для того, чтобы Пилинт назвал такое использование неправильным. Следовательно, прежде чем я просто сконфигурирую свой проект на игнорирование правила, я хотел бы знать, не хватает ли я чего-то в своих рассуждениях.
Когда использование len(SEQ)
в качестве значения условия проблематично? Какие основные ситуации Pylint пытается избежать с помощью C1801?