[코딩의 기술] 2. PEP 8 스타일 가이드를 따르자◎ Python/코딩의 기술 (책)2022. 9. 15. 13:17
Table of Contents
반응형
PEP 8
PEP은 파이썬 개선 제안서(Python Engahncement Proposal)다. 아마 8번째 문서라 8이 붙은 것 같다. 즉 PEP8은 파이썬 코드를 어떻게 구성할지 알려주는 스타일 가이드다. 물론 문법만 맞춰도 프로그램이 실행되지만, 일관성 있는 스타일을 사용하면 유지보수가 더욱 쉬워지고 가독성도 높아진다. 다양한 프로젝트에서 협업할 때에도 스타일 가이드를 따르면 좋다.
PEP 8에는 파이썬 코드를 명확하게 작성하기 위한 방법이 자세히 나와 있다. 전체 가이드는 이 링크에서 볼 수 있다. 반드시 따라야 하는 몇 가지 규칙은 다음과 같다.
화이트스페이스(whitespace)
파이썬에서 화이트스페이스(공백)는 문법적으로 의미가 있다. 특히 파이썬은 코드의 명료성 때문에 공백의 영향에 민감한 편이다.
- 탭이 아닌 스페이스로 들여쓴다. (하여 최근 IDE들은 Tab을 자동으로 스페이스로 변환시켜 주기도 한다.)
- 문법적으로 의미 있는 들여쓰기는 각 수준마다 스페이스 네 개를 사용한다.
- 한 줄의 문자 길이가 79자 이하여야 한다.
- 표현식이 길어져 다음 줄로 이어지면 일반적인 들여쓰기에 추가적으로 스페이스 네 개를 사용한다.
- 함수와 클래스는 빈 줄 두 개로 구분해야 한다.
- 클래스에서 메서드는 빈 줄 하나로 구분해야 한다.
- 리스트 인덱스, 함수 호출, 키워드 인수 할당에는 스페이스를 사용하지 않는다.
- 변수 할당 앞뒤에 스페이스 하나만 사용한다.
명명(naming)
PEP 8은 언어의 부분별로 독자적인 명명 스타일을 제시한다.
함수, 변수, 속성은 lowercase_underscore
def example_sample():
pass
보호(protected) 인스턴스 속성은 _leading_underscore
class ExampleSample:
def __init__(self, name, age):
self.name = name
self._age = age # 보호 속성
비공개(private) 인스턴스 속성은 __double_leading_underscore
class ExampleSample:
def __init__(self, name, age):
self.name = name
self.__age = age # 비공개 속성
클래스와 예외는 CapitalizedWord
class ExampleSample: # 클래스 이름 지정
def __init__(self, name, age):
self.name = name
self.__age = age
모듈 수준의 상수는 ALL_CAPS
MATH_PI = 3.14 # 상수 지정
이외에도
- 클래스의 인스턴스 메서드에서는 첫 번째 파라미터의 이름을 self로 지정
- 클래스 메서드에서는 첫 번째 파라미터의 이름을 cls로 지정
등등이 존재한다.
표현식과 문장
파이썬의 계명에는 "어떤 일을 하는 확실한 방법이 있어야 한다."는 표현이 있다.
- 긍정 표현식의 부정(if not a is b) 대신에 인라인 부정(if a is not b)를 사용한다.
- 길이를 확인(if len(somelist) == 0)하여 빈 값을 확인하지 않는다. if not somelist를 사용하고, 빈 값은 암시적으로 False가 된다고 가정한다.
- 비어 있지 않은 값에도 위와 같은 방식이 적용된다.
- 한 줄로 된 if문, for, while, except 복합문을 쓰지 않는다. 여러 줄로 나눠 명료하게 작성한다.
- 항상 파일의 맨 위에 import를 놓는다.
- 모듈을 import할 때 항상 모듈의 절대 이름을 사용하며 현재 모듈의 경로를 기준으로 상대 경로로 된 이름을 사용하지 않는다.
예를 들어 bar 패키지의 foo 모듈을 사용할 때 import foo가 아닌 from bar import foo라 하자. - 상대적인 import를 해야 한다면 명시적으로 from . import foo라고 한다.
참고
- 파이썬 코딩의 기술 - 똑똑하게 코딩하는 법, 브렛 슬라킨 저/오현석 역
반응형
'◎ Python > 코딩의 기술 (책)' 카테고리의 다른 글
[코딩의 기술] 6. 인덱스보다는 대입을 사용해 데이터를 언패킹하자 (1) | 2022.11.30 |
---|---|
[코딩의 기술] 5. 복잡한 식을 쓰는 대신 도우미(헬퍼) 함수를 작성하자 (0) | 2022.11.29 |
[코딩의 기술] 4. f-문자열을 통한 인터폴레이션을 사용하라 (1) | 2022.11.28 |
[코딩의 기술] 3. bytes와 str의 차이를 알자 (0) | 2022.11.27 |
[코딩의 기술] 1. 사용 중인 파이썬의 버전을 알자 (1) | 2022.09.14 |
@Reo :: 코드 아카이브
자기계발 블로그