2014-02-17 4 views
48

나는 아직도 파이썬 규칙을 사용하고 내 코드를보다 파이썬 수 있도록 pylint를 사용하여,하지만 난 pylint이 단일 문자 변수 이름을 좋아하지 않는다는 사실에 의해 의아해 해요지고 있어요. 이 같은 몇 가지 루프가 :왜 pylint가 단일 문자 변수 이름을 처리합니까?

for x in x_values: 
    my_list.append(x) 

내가 pylint를 실행할 때, 나는 Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30} 받고 있어요 - 유효한 변수 이름 세 사이의 31 자 여야 제안,하지만 난을 통해 봤는데 PEP8 naming conventions과 나는 하나의 소문자에 대해 명시 적으로 아무 것도 보지 않는다. 나는 그것을 사용하는 많은 예제를 본다.

는 PEP8에서 내가 부족 뭔가가 있나요 또는이 pylint에 고유 한 표준이다?

답변

37

PyLint 검사뿐만 아니라 PEP8의의 recomendations. 또한 자체 권장 사항을 가지고 있는데, 그 중 하나는 변수 이름이 설명 적이어야하고 너무 짧지 않아야한다는 것입니다.

my_list.extend(x_values) 

또는 (정규식 전달합니다) 임시 변수에 대한 자리 표시 자

9

깊은 이유는 당신이 무엇을 기억할 수 있다는 것이다으로 _를 사용

이 같은 짧은 이름을 방지하기 위해 사용할 수 있습니다 코드를 작성할 때 a, b, , x, yz을 의미했지만 다른 사람이 코드를 읽었을 때 또는 코드를 다시 읽은 경우에도 코드를 제공 할 때 훨씬 쉽게 읽을 수있게되었습니다. 의미 론적 이름. 한 번 칠판에 글을 쓰고 지우지 않고 있습니다. 우리는 10 년 이상 계속 머물러 있고 여러 번 읽혀질 수있는 코드를 작성하고 있습니다.

의미 론적 이름을 사용하십시오. 내가 사용했던 시맨틱 이름은 그것은 그들을 입력 또는 두 개의 여분의 두번째 걸릴 수 등 path, obj_generator, denominator, ratio 같았지만, 시간이 당신이 그때부터도 반 시간을 쓴 알아 내려고 막아 그것의 가치가 충분합니다.

bool check_modality(string a, Mode b, OptionList c) { 
    ModalityChecker v = build_checker(a, b); 
    return v.check_option(c); 
} 

: 당신은 일반적으로 변수의 선언이나 기능/방법 프로토 타입의 이름 옆에 종류를 얻을 수 있기 때문에 강력하게 형식화 된 언어에서

+6

감사합니다. 마지막 코드는 다음과 같습니다 - https://gist.github.com/amandabee/8969833 - 나는 (또는) 1 년 동안 읽을 수있는 코드에 관한 귀하의 요지를 보았습니다. 그러나이 경우 x와 y는 진정으로 기술적 인. – Amanda

12

1 편지 이름의 변수는 확인 틱 될 수 있습니다 파이썬에서, 당신은 당신이 쓰는, 그래서 만약이 정보를 얻을하지 않습니다 당신은 함수가 일을 할 수 있고, 어떻게 호출 것과 같은 유지 보수 팀 전혀 단서를 남기지 않고있어

def check_modality(a, b, c): 
    v = build_checker(a, b) 
    return v.check_option(c) 

하고, 그것은 무엇을 반환합니다.

def check_modality(name, mode, option_list): 
    checker = build_checker(name, mode) 
    return checker.check_option(option_list) 

을하고 심지어 물건을 수행하고 어떤 종류의 것이 예상된다 무엇을 설명하는 문서화 문자열을 추가 : 그래서 파이썬에서, 당신은 설명 이름을 사용하는 경향이있다.

+6

"컴파일 된 언어"대신 "명시 적으로 입력"이라고 적습니다. 하스켈도 컴파일되어 있지만 파이썬처럼 암시적인 선언을 작성할 수 있습니다. –

+6

이러한 경우에 동의하지만, 변수 이름에 3 자 이상을 사용한다고해서 설명이 가능하다는 것은 아닙니다. 현재'f (items) = f.readlines()'와 같이'with open (FILE) '을 사용하고 있습니다. 변수'f'가 정말 명백한 곳이지만, 필 린트 경고가 나옵니다. 이것은 나를 flake8로 바 꾸었습니다. –

+1

변수 이름에 'f'를 허용하도록 필링 트 규칙을 변경할 수도 있습니다. i, j AFAIR에는 이미 예외가 있습니다. –

45

gurney alex가 언급 한 것에 대해 좀 더 자세하게 설명했습니다. PyLint에게 variable names에 대한 예외를 지정하라고 알려줄 수 있습니다.이 문자는 3 자 미만이지만 완벽하게 명확합니다. 에서 찾거나 추가하십시오 pylint.RC 파일 : 다음

# Good variable names which should always be accepted, separated by a comma 
good-names=i,j,k,ex,Run,_,pk,x,y 

PK (기본 키), X, Y는 I 추가 한 변수 이름들이다.

+3

이것은 가장 좋은 답변입니다. – giorgiosironi

1

요즘에는 regexp를 무시할 수있는 옵션이 있습니다. 나는. 당신이 변수로 하나의 문자를 허용하려면 :

pylint --variable-rgx=[a-z0-9_]{1,30} <filename> 

그래서, pylint는 PEP8과 일치하고 상단에 추가 위반을 가져올 수 없습니다.

관련 문제