[참고]

1. 원문 : https://www.python.org/dev/peps/pep-0008/

2. 파이썬 코딩의 기술(개정2판) /  브렛 슬라킨 저 / 길벗

 

- 파이썬 코드를 작성할 때는 항상 PEP8 (파이썬 개선 제안 #8) 스타일 가이드를 따르기
- 큰 파이썬 커뮤니티와 공통된 스타일을 공유하면 다른 사람과 협력할 때 도움이 됨
- 일관성 있는 스타일을 사용하면 나중에 자신이 작성한 코드를 직접 수정할 때 더 수월함

(1) 공백(whitespace) / 탭, 스페이스, 새줄(newline) 등의 문자를 모두 합한 말


- 탭 대신 스페이스를 사용해 들여쓰기
- 문법적으로 중요한 들여쓰기에는 4칸 스페이스 사용하기
- 라인 길이는 79개 문자 이하
- 긴 식을 다음 줄에 이어서 쓸 경우, 일반적인 들여쓰기보다 4 스페이스 더 들여쓰기
- 파일 안에 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣기
- 클래스 안에서 메서드(함수)와 메서드(함수) 사이에는 빈 줄을 한 줄 넣기
- 딕셔너리(dictionary)에서 키와 콜론(:) 사이에는 공백을 넣지 않고, 한 줄 안에 키와 값을 같이 넣는 경우에는 콜론 다음에 스페이스를 하나 넣기
- 변수 대입에서 = 전후에는 스페이스를 하나씩만 넣기
- 타입 표기를 덧붙이는 경우, 변수 이름과 콜론 사이에 공백을 넣지 않도록 주의! 콜론과 타입 정보 사이에는 스페이스 하나 넣기

(2) 명명 규약
- 함수, 변수, 애트리뷰트(attribute)는 lowercase_underscore 처럼 소문자와 밑줄 사용하기
- 보호돼야 하는 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되, _leading_underscore 처럼 밑줄로 시작하기
- 비공개(private) (한 클래스 안에서만 쓰이고 다른 곳에서는 쓰면 안 되는 경우) 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되, __leading_underscore처럼 밑줄 두 개로 시작하기
- 클래스(예외도 포함)는 CapitalizedWord처럼 여러 단어를 이어 붙이되, 각 단어의 첫 글자를 대문자로 하기
- 모듈 수준의 상수는 ALL_CAPS 처럼 모든 글자를 대문자로 하고 단어와 단어 사이를 밑줄로 연결한 형태를 사용
- 클래스에 들어 있는 인스턴스 메서드(함수)는 호출 대상 객체를 가리키는 첫 번째 인자의 이름으로 반드시 self를 사용해야 함
- 클래스 메서드는 클래스를 가리키는 첫 번째 인자의 이름으로 반드시 cls를 사용해야 함 (cls 참고 : https://journeytosth.tistory.com/73)

(3) 식과 문
- 긍정적인 식을 부정하지 말고 (if not a is b) 부정을 내부에 넣기 (if a is not b)
- 빈 컨테이너(container)나 시퀀스(sequence) ([]나 " 등)를 검사할 때는 길이를 0과 비교 (if len(something)==0) 하지 말기. 대신 if 컨테이너가 비어 있지 않은 경우 암묵적으로 True로 평가된다는 사실을 활용할 것
- 한 줄짜리 if 문이나 한 줄짜리 for, while 루프, 한 줄짜리 except 복합문을 사용하지 말기. 명확성을 위해 각 부분을 여러 줄에 나눠 배치하기
- 식을 한 줄 안에 다 쓸 수 없는 경우, 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기를 추가해서 읽기 쉽게 만들기
- 여러 줄에 걸쳐 식을 쓸 때는 줄이 계속된다는 표시를 하는 \ 문자보다는 괄호를 사용하기

(4) 임포트
- import 문(from x import y 포함)을 항상 파일 맨 앞에 위치하기
- 모듈을 임포트할 때 절대적인 이름(absolute name)을 사용하고, 현 모듈의 경로에 상대적인 이름은 사용하지 말기
(예를 들어 bar 패키지로부터 foo 모듈을 임포트한다면 from bar import foo라고 해야지, import foo라고 하면 안 됨)
- 반드시 상대적인 경로로 임포트해야 하는 경우는 from . import foo 처럼 명시적인 구문을 사용하기
- 임포트를 적을 때는 표준 라이브러리 모듈, 서드 파티 모듈, 개인이 만든 모듈 순서로 섹션을 나누기. 각 섹션에는 알파벳 순서로 모듈을 임포트하기.

+ Recent posts