..

Pep8 스타일 가이드

What is PEP 8

  • Python enhancedment Proposal #8 으로 파이썬 개선 제안 또는 PEP8 이라고 부른다.
  • PEP8 은 파이썬 코드를 어떤 형식으로 작성할지 알려주는 스타일 가이드 이다.

PEP 8 을 이용하는 이유

  1. 문법만 올바르다면 어떤형식으로 코드를 작성해도 되지만 일관적인 스타일 을 사용한다면 코드를 더욱 친숙하게 접근하고 , 코드 가용성을 키울수 있다.
  2. 협업 을 할때 공통된 스타일가이드를 따른다면 더욱 쉽게 이를 진행할수 있다.
  3. 실수를 줄일수 있으며 코드를 수정하기도 편하다.

공백

여기서 의미하는 공백은 탭,스패이스,새줄(newLine) 등의 문자를 모두 합한 말이다.

  • 대신 스페이스를 사용해 들여쓰자
  • 문법적으로 중요한 들여쓰기에는 4칸 스페이스를 사용하자
  • 라인길이는 79개 문자 이하로 작성하자.(한글은 한글자는 영문 두글자 에 해당한다.)
  • 긴식을 다음줄에 이어서 쓸 경우에는 4스페이스 를 더 들여쓰자.
  • 파일안에서 각 함수와 클래스 사이에는 빈줄 2줄 넣자.
  • 클래스 안에서 메소드 와 메소드 사이에는 빈줄 한줄 넣자.
  • dictionary 안에서 키와 콜론 사이에는 공백을 넣지않고
  • 한줄안에 키와 값을 같이 넣는 경우에는 콜론 다음에 스페이스 하나 넣자.
  • 변수 대입에서 = 전후에는 스페이스 하나씩만 넣자.
  • 타입 표기를 덧붙이는 경우에는 변수 이름과 콜론 사이에 공백을 넣지 않도록 하자
  • 타입 표기할때 콜론과 타입 정보 사이에는 스페이스 하나 넣자.

명명규약

  • 함수,변수,애트리뷰트 는 lowercase_underscore 처럼 소문자와 밑줄을 사용하자. (snake case)
  • 보호돼야 하는 인스턴스 애트리뷰트 는 일반적인 애트리뷰트 이름 규칙을 따르되. _leading_underscore 처럼 밑줄로 시작하자.
  • 비공개 인스턴스 애트리뷰트 는 일반적인 애트리뷰트 이름규칙을 따르되 __leading_underscore 처럼 밑줄 두개로 시작하자.
  • 클래스는 CapitalizedWord 처럼 여러단어를 이어붙이되, 각단어의 첫글자를 대문자로 만들자. (PascalCase)
  • 모듈수준의 상수는 ALL_CAPS 처럼 모든 글자를 대문자로 하고 단어와 단어 사이를 밑줄로 연결한 형태를 사용하자.
  • 클래스에 들어있는 인스턴스 메서드는 호출 대상 객체를 가리키는 첫번째 인자의 이름으로 반드시 self 를 사용하자.
  • 클래스 메서드는 클래스를 가리키는 첫 번째 인자의 이름으로 반드시 cls를 사용해야한다.

식과 문

‘파이썬의 선’ 에서는 ‘문제를 해결할 명백한 방법이 하나 있으며, 가급적이면 유일해야 한다’고 언급한다.

  • 긍정적인 식을 부정하지 말고(if not a is b) 부정을 내부에 넣자. (if a is not b)
  • 컨테이너 나 시퀀스 를 검사 할때는 길이를 0과 비교하지 말고 (if len(a) == 0),(if len(a) != 0) , 빈 컨테이너나 시퀀스 값이 암묵적으로 True 혹은 False 로 취급된다는 사실을 활용해 (if not 컨테이너),(if 컨테이너) 라는 조건문을 쓰자
  • 한줄짜리 if 문이나 한줄짜리 for,while 루프,except 복합문을 사용하지 말고 명확하게 각부분을 여러 줄로 나눠 배치하자.
  • 식을 한줄에 다 작성 할수 없는 경우 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기를 추가해서 익기 쉽게 만들자.
  • 여러줄에 걸쳐 식을 쓸때는 줄이 계속된다는 표시를 하는 \ 보다는 괄호를 이용하라

import

Pylint 도구 를 사용하면 PEP8 스타일 가이드를 자동으로 실행 해주며 , 다양한 오류를 감지해준다.

  • import 문을 항상 파일 맨 앞에 위치시켜라.
  • 모듈을 import 할때는 절대적인 이름을 사용하고 , 현모듈의 경로에 상대적인 이름을 사용하지 말라

    ex) bar 패키지 에서 foo 를 임포트 하는경우

      import foo
    

    라고 하면 안되고

      from bar import foo
    

    처럼 어디 패키지에서 import 하는지 명시해줘야 한다.

  • 반드시 상대적인 경로로 임포트 해야 하는 경우에는
      from . import foo
    

    처럼 명시적인 구문을 사용하자.

  • 임포트를 적을 때는 표준 라이브러리 모듈,서드 파티 모듈,내가 만든 모듈 의 순서로 섹션을 나눠라 각 세션에서는 알파벳 순서로 모듈을 임포트 하라.