이 코드 스 니펫을 고려하면 :
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에 놀랐습니다.
[pylint] C1801 :
len(SEQUENCE)
조건 값으로 사용하지 마십시오
규칙 C1801은 언뜻보기에 매우 합리적으로 들리지 않았으며 참조 안내서 의 정의 는 이것이 왜 문제인지 설명하지 않습니다. 사실, 그것은 그것을 옳지 않은 사용 이라고 부릅니다 .
len-as-condition (C1801) : Pylint가 조건 내부에서 len (sequence)의 잘못된 사용을 감지 할 때 사용
len(SEQUENCE)
되는 조건 값으로 사용 하지 마십시오 .
나의 검색 시도도 나에게 더 깊은 설명을 제공하지 못했습니다. 나는 시퀀스의 길이 속성이 느리게 평가 __len__
될 수 있고 부작용을 갖도록 프로그래밍 될 수 있음을 이해하지만 Pylint가 그러한 사용을 잘못 사용하기에 충분히 문제가되는지 여부는 의문의 여지가 있습니다. 따라서 규칙을 무시하도록 프로젝트를 간단하게 구성하기 전에 추론에 뭔가 빠졌는지 여부를 알고 싶습니다.
len(SEQ)
조건 값으로 사용하는 것이 언제 문제가됩니까? Pylint가 C1801로 피하려고하는 주요 상황은 무엇입니까?
len
그것이 호출되는 컨텍스트를 알지 못하므로 길이를 계산하는 것이 전체 시퀀스를 순회하는 것을 의미하는 경우 길이를 계산해야합니다. 결과가 단지 0과 비교되고 있다는 것을 알지 못합니다. 부울 값 계산은 시퀀스의 실제 길이에 관계없이 첫 번째 요소를 본 후에 중지 될 수 있습니다. 나는 pylint가 여기에 약간의 의견이 있다고 생각합니다. 나는 그것을 사용 하는 것이 잘못 된 상황을 생각할 수 없다 len
. 단지 대안보다 더 나쁜 옵션이라는 것이다.
if files:
하거나if not files: