반응형
PEP 8 스타일 가이드란?
파이썬 개선 제안(Python Enhancement Proposal) #8, 또는 PEP 8은
파이썬 코드를 어떤 형식으로 작성할지 알려주는 스타일 가이드다.
가이드를 따르는 이유
- 코드에 더 친숙하게 접근하고, 코드르 더 쉽게 읽을 수 있다.
- 프로젝트를 수행할 때 더 쉽게 협력할 수 있다.
- 코드를 수정하기 쉽고 흔히 저지르기 쉬운 실수도 피할 수 있다.
규칙
공백(탭, 스페이스, 새 줄(newline))
파이썬에서 공백은(whitespace)은 중요한 의미가 있다.
파이썬프로그래머들은 코드의 의미를 명확히 하는데 공백이 미치는 영향에 특히 민감하다.
- 탭 대신 스페이스를 사용해 들여쓰기하라.
- 문법적으로 중요한 들여쓰기에는 4칸 스페이스 사용하여라.
- 라인 길이는 79개 문자 이하여야 한다.
- 이때, 한글 한 글자는 시각적으로 영문 두 글자에 해당한다고 계산하는 것이 편하다.
- 긴 식을 다음 줄에 이어서 쓸 경우에는 일반적인 들여쓰기보다 4 스페이스를 더 들여써야 한다.
- 파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣어라.
- 클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한 줄 넣어라.
- 딕셔너리(dictionary)에서 키와 콜론(:) 사이에는 공백을 넣지 않고, 한 줄 안에 키와 값을 같이 넣는 경우에는 콜론 다음에 스페이스를 하나 넣는다.
- 변수 대입에서 = 전후에는 스페이스를 하나씩만 넣는다.
- 타입 표기를 덧붙이는 경우에는 변수 이름과 콜론 사이에 공백을 넣지 않도록 주의하고, 콜론과 타입 정보 사이에는 스페이스를 하나 넣어라.
명명 규약
여러 부분에서 사용하는 이름을 어떻게 붙일지에 대한 고유 스타일을 제공한다.
이런 규약을 사용하면 코드를 읽을 때 각 이름이 어떤 유형에 속하는지 쉽게 구분할 수 있다.
- 함수, 변수, 애트리뷰트(attribute)는
lowercase_underscore
처럼 소문자와 밑줄을 사용한다.(뱀표기법 snake case) - 보호돼야 하는 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되,
_leading_underscore
처럼 밑줄로 시작한다. - 비공개(private)(한 클래스 안에서만 쓰이고 다른 곳에서는 쓰면 안 되는 경우) 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되,
__leading_underscore
처럼 밑줄 두 개로 시작한다. - 클래스(예외도 포함한다)는
CaptializedWord
처럼 여러 단어를 이어 붙이되, 각 단어의 첫 글자를 대문자로 만든다.(낙타표기법 camel case) - 모듈 수준의 상수는
ALL_CAPS
처럼 모든 글자를 대문자로 하고 단어와 단어 사이를 밑줄로 연결한 형태를 사용한다. 클래스에 들어 있는 인스턴스 메서드
는 호출 대상 객체를 가리키는 첫 번째 인자의 이름으로 반드시self
를 사용해야 한다.클래스 메서드
는 클래스를 가리키는 첫 번째 인자의 이름으로 반드시cls
를 사용해야 한다.
식과 문
- 긍정적인 식을 부정하지 말고 부정을 내부에 넣어라.
if not a is b: # x
if a is not b: # O
- 빈 컨테이너나 시퀀스([], '' 등)를 검사할 때는 길이를 0과 비교하지 말고 빈 컨테이너나 시퀀스 값이 암묵적으로 False로 취급된다는 사실을 활용해
if not 컨테이너
라는 조건문을 써라.
if len(something) == 0: # x
if not something: # O
- 비어 있지 않은 컨테이너나 시퀀스([1], 'hi' 등)를 검사할 때도 길이가 0보다 큰지 비교하지 말고 if 컨테이너가 비어 있지 않은 경우 암묵적으로 True로 평가된다는 사실을 활용해라.
if something:
- 한 줄짜리 if 문이나 한 줄짜리 for, while 루프, 한 줄짜리 except 복합문을 사용하지 말라. 명확성을 위해 각 부분을 여러 줄에 나눠 배치하라.
if something:
print("something")
- 식을 한 줄 안에 다 쓸 수 없는 경우, 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기를 추가해서 읽기 쉽게 만들어라.
if (a+b>10 and
b-c<5 and
a-c>10):
print("something")
- 여러 줄에 걸쳐 식을 쓸 때는 줄이 계속 된다는 표시를 하는 \ 문자보다는 괄호를 사용해라.
# X
if a+b>10 \
and b-c<5 \
and a-c>10:
print("something")
# O
if (a+b>10
and b-c<5
and a-c>10):
print("something")
임포트
PEP 8은 모듈 임포트(import)해 코드에 사용하는 방법에 대해서도 가이드 라인을 제시한다.
- import문(from x import y도 포함)을 항상 파일 맨 앞에 위치시켜라.
- 모듈을 임포트할 때는 절대적인 이름을 사용하고, 현 모듈의 경로에 상대적인 이름은 사용하지 말라.
# bar 패키지로부터 foo 모듈을 임포트 한다면
from bar import foo # O
import foo # X
- 반드시 상대적인 경로로 임포트해야 하는 경우에는
from . import foo
처럼 명시적인 구문을 사용해라. - 임포트를 적을 때는 표준 라이브러리 모듈, 서드 파티 모듈, 만든 모듈 순서로 섹션을 나눠라. 각 섹션에서는 알파벳 순서로 모듈을 임포트 하라.
PEP 한국어 버전
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python] Python 가상환경 생성 및 활성화/비활성화 하기 (0) | 2023.11.05 |
---|---|
[Python] 리스트 안 딕셔너리에서 원하는 데이터 얻어오기 (0) | 2023.10.27 |
[Python] 사용 중인 파이썬 버전 확인하기 (0) | 2023.08.10 |
[Python] 파이썬 경로 분리하기(파일명만 추출, 파일 확장자만 추출, 경로 추출, 경로와 파일명을 분리 등) (0) | 2023.05.20 |
[Python] 파이썬 데이터 타입 확인하기(type(), isinstance()) (0) | 2023.03.19 |