Effective Python C1. Pythonic(2) - PEP 8 스타일 가이드를 따르라
Introduction
PEP란 파이썬 개선 제안(Python Enhancement Proposal)을 의미하며 파이썬 코드를 어떻게 작성하는 것이 좋은지 알려주는 스타일 가이드이다.
이번 포스팅에서는 제일 중요한 스타일 가이드인 PEP8에 대해 정리하였다.
Best WAY 2 : PEP 8 스타일 가이드를 따르라
PEP8은 깔끔하게 코드를 작성하는 방법을 제시하며, 많은 파이선 개발자들과 커뮤니티들이 이 제안을 따른다.
클린한 코드를 작성하기 위해서는 최소한 이 가이드대로 작성하는 것이 좋다.
공백의 처리
- 탭 대신 스페이스를 4번 사용해 들여쓰기해라.
- 단, 이미 탭을 쓴 코드를 수정할 경우, 그대로 탭을 쓴다. 절대로 탭과 스페이스를 혼용해 쓰지 않는다.
- 라인의 길이는 79 문자 이하여야 한다.
- 긴 식을 다음 줄에 이어서 쓸 경우 일반적인 들여쓰기보다 4 스페이스 더 들여써야 한다.
- 파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣어라.
- 클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한 줄 넣어라.
- 딕셔너리에서 키와 콜론(:) 사이에 공백을 넣지 말고, 콜론과 값 차이에 스페이스를 하나 넣는다. ex) {‘key’: value}
- 변수 대입에서 = 전후에는 스페이스를 하나씩 넣는다.
명명 규약
- 함수, 변수, 애트리뷰트는 소문자와 밑줄을 사용한다. ex) lowercase_value
- 보호되어야 하는 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되, 언더바(_)로 시작한다. ex) _protected_value
- 비공개 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되, 언더바 두개로 시작한다. ex) __private_value
- 예외를 포함한 클래스는 여러 단어를 이어 붙이고 각 단어의 첫글자는 대문자로 만든다. ex) CapitalizedWord
- 모듈 수준의 상수는 모든 글자를 대문자로 하고 단어와 단어 사이를 밑줄로 연결한다. ex) ALL_CAPS
- 클래스에 들어 있는 인스턴스 메서드는 호출 대상 객체를 가리키는 첫 번째 인자의 이름으로 반드시 self를 사용한다.
- 클래스 메서드는 클래스를 가리키는 첫 번째 인자의 이름으로 반드시 cls를 사용한다.
식과 문
- 부정문의 경우 밖에 놓지 말고, 내부에 넣어라. ex) if a is not b (O), if not a is b (X)
- 빈컨테이너나 시퀀스를 검사 시, 길이 0을 비교하지 말고, False로 취급됨을 이용해 if not 컨테이너 와 같이 써라.
- 마찬가지로 비어있지 않은 컨테이너나 시퀀스는 if 컨테이너와 같이 True로 취급해 사용한다.
- 식을 한 줄 안에 다 쓸 수 없는 경우, 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기를 추가해서 읽기 쉽게 만들라.
- 여러 줄을 걸쳐 식을 쓸 때는 줄이 계속된다는 표시를 하는 \ 문자보다는 괄호를 사용하라.
임포트
- import 문(from x import y도 포함)을 항상 파일 맨 앞에 위치시켜라.
- 모듈을 임포트할 때는 절대적인 이름을 사용하고, 현 모듈의 경로에 상대적인 이름은 사용하지 않는다.
ex) bar 패키지에서 foo 모듈을 임포트할 시, import foo 보다 from bar import foo 라고 한다. - 반드시 상대적인 경로로 임포트해야 되는 경우 from . import foo 와 같이 명시적 구문을 사용한다.
- 임포트를 적을 때는 표준 라이브러리, 서드 파티, 직접 만든 모듈 순서로 섹션을 나누고 알파벳 순서로 모듈을 임포트해라.
Discussion
탭 대신 스페이스를 4번 사용하는 이유
개인적으로는 탭을 1번 쓰는 것이 스페이스 4번 쓰는 것보다 편하기 때문에 탭을 쓰고 싶으나.. PEP8에서는 탭을 권장하지 않는다.
이는 탭을 쓸 경우 상황에 따라 보여지는 공백의 길이가 달라지기 때문이라는 의견도 있으나,
어찌되었건 일관적인 코드 스타일을 위해서는 정해진 규약대로 스페이스 4번을 사용해야 한다는 의견이 주로 보이고 있다.
이와 관련해서는 다른 개발자들 사이에서도 논쟁이 좀 있는 편인데 이글 을 참조해도 좋을 것 같다.
PEP8를 가이드하는 툴
파이참 IDE에서는 코드를 작성하면 PEP8를 제대로 지키는지 자동으로 알려준다. 책에서는 Pylint 라는 정적 분석기의 도움을 받아 PEP8을 가이드 해준다. 기타 다른 IDE에서도 PEP8와 관련된 Plugin이 있으니 사용해도 좋을 것 같다.
Summary
- 파이썬 코드 작성 시 PEP8 스타일 가이드를 따라야 한다.
Reference
파이썬 코딩의 기술 제 2판. - 브렛 슬리킨 지음 / 오현석 옮김
PEP8 공식 문서