파이썬을 파이썬스럽게 사용하려면 PEP 8을 알아야 한다. 파이썬 개선 제안서 (Python Enhancement Proposal) #8, 다른 말로 PEP 8은 파이썬 코드를 어떻게 구성할지 알려주는 스타일 가이드다. 화이트스페이스, 네이밍, 표현식과 문장에 관한 규칙의 주요 내용은 다음과 같다.
1️⃣ 탭이 아닌 스페이스로 들여쓴다.
2️⃣ 문법적으로 의미 있는 들여쓰기는 각 수준마다 스페이스 네 개를 사용한다.
3️⃣ 표현식이 길어서 다음 줄로 이어지면 일반적인 들여쓰기 수준에 추가로 스페이스 네 개를 사용한다.
4️⃣ 파일에서 함수와 클래스는 빈 줄 두 개로 구분해야 한다.
5️⃣ 클래스에서 메서드는 빈 줄 하나로 구분해야 한다.
6️⃣ 리스트 인덱스, 함수 호출, 키워드 인수 할당에는 스페이스를 사용하지 않는다.
7️⃣ 변수 할당 앞뒤에 스페이스를 하나만 사용한다.
위 규칙을 적용한 샘플 코드는 다음과 같다.
class Calculator:
def __init__(self, value=0): # 1️⃣ 들여쓰기는 스페이스 4개, 6️⃣ 키워드 인수 할당에는 스페이스X
self.value = value # 7️⃣ 변수 할당 앞뒤에 스페이스 하나 사용
def add(self, x): # 5️⃣ 클래스에서 메서드는 빈 줄 하나로 구분
self.value += x
return self.value
def calculate_expression(a, b, operation): # 4️⃣ 파일에서 함수와 클래스는 빈 줄 두 개로 구분
if operation == 'add':
return a + b
elif operation == 'complex_operation':
return (a + b + # 3️⃣ 표현식이 길어지면 다음 줄로 넘어가고 추가 들여쓰기
a * b -
b / a)
else:
return 'Error: Unsupported operation' # 7️⃣ 연산자 앞뒤에 스페이스 하나 사용
if __name__ == '__main__': # 2️⃣ 조건문, 반복문, 함수 호출 등에서 스페이스를 적절히 사용
calc = Calculator() # 6️⃣ 함수 호출 시 인수와 함수명 사이에 스페이스 사용하지 않음
result = calc.add(10) # 6️⃣ 함수 호출 시 인수와 함수명 사이에 스페이스 사용하지 않음
expression_result = calculate_expression(10, 5, 'complex_operation') # 6️⃣ 함수 호출 시 인수와 함수명 사이에 스페이스 사용하지 않음
print(f"Calculator 결과: {result}")
print(f"수식 계산 결과: {expression_result}")
1️⃣ 모듈은 짧고 모두 소문자 이름을 가져야 한다. 가독성을 개선하는 경우 모듈 이름에 밑줄을 사용할 수 있다.
2️⃣ 모듈 수준 상수는 ALL_CAPS 형식을 따른다.
3️⃣ 클래스와 예외는 CapitalizedWord 형식을 따른다. 예외는 접미사 Error로 끝나야 한다.
4️⃣ 클래스의 Public 메서드, 함수, 변수, 속성은 lowercase_underscore 형식을 따른다.
5️⃣ 클래스의 Non-public 메서드와 인스턴스 변수에는 _leading_underscore 형식을 따른다.
6️⃣ 클래스의 인스턴스 메서드에서 첫 번째 파라미터의 이름은 self로 지정한다.
7️⃣ 클래스 메서드에서는 첫 번째 파라미터의 이름을 cls로 지정한다.
8️⃣ 서브 클래스에서의 변수명 충돌을 막으려면 __double_leading_score 형식을 따르는 인스턴스 변수명을 사용한다.
# 1️⃣ 파일명은 simple_module.py이라 가정한다.
ALL_CAPS_CONSTANT = 100 # 2️⃣ 모듈 수준 상수
class SampleClass: # 3️⃣ 클래스 이름은 CamelCase
def __init__(self, value): # 6️⃣ 인스턴스 메서드, 첫 번째 파라미터는 self
self.public_var = value # 4️⃣ Public 변수
self._private_var = value # 5️⃣ Non-public 변수
self.__mangled_var = value # 8️⃣ 이름 충돌 방지 변수
def _private_method(self): # 5️⃣ Non-public 메서드
if self._private_var < 0: # 음수 값에 대한 예외 처리
raise CustomError("Value cannot be negative!")
return self._private_var * ALL_CAPS_CONSTANT
def public_method(self): # 4️⃣ Public 메서드
return self._private_method()
@classmethod
def class_method(cls, value): # 7️⃣ 클래스 메서드, 첫 번째 파라미터는 cls
return cls(value * ALL_CAPS_CONSTANT)
class CustomError(Exception): # 3️⃣ 예외 클래스
pass
if __name__ == '__main__':
instance = SampleClass(10)
try:
print(instance.public_method())
print(SampleClass.class_method(5)) # 클래스 메서드 호출
except CustomError as e:
print(e)
파이썬 코드를 작성할 때 자동으로 PEP 8 스타일을 준수하도록 코드 포맷터를 설정할 수 있다. 대표적인 코드 포맷터는 black이다.