업데이트:

Python PEP 8 스타일 가이드

1. PEP 8이란?

PEP 8(Python Enhancement Proposal 8)은 Python 코드의 가독성과 일관성을 향상시키기 위한 스타일 가이드입니다. Python의 창시자인 Guido van Rossum이 작성했으며, Python 커뮤니티에서 널리 채택된 코딩 표준입니다.

1.1 PEP 8의 목적

  • 코드의 가독성 향상
  • 일관된 코딩 스타일 유지
  • 협업 효율성 증대
  • 코드 유지보수 용이성 향상

2. PEP 8 주요 규약

2.1 코드 레이아웃

들여쓰기

  • 4칸 공백 사용
# 올바른 들여쓰기 (4칸 공백 사용)
def long_function_name(
        var_one, var_two,
        var_three, var_four):
    print(var_one)

# 잘못된 들여쓰기
def long_function_name(
    var_one, var_two,  # 들여쓰기가 부족함
    var_three, var_four):
    print(var_one)

최대 줄 길이

  • 한 줄은 최대 79자
  • 긴 줄은 여러 줄로 나누기
  • 백슬래시() 사용하여 줄 나누기
# 올바른 예시
from mypkg.mymodule import (
    function1, function2,
    function3, function4)

long_string = ('This is a very long string that '
               'cannot fit within 79 characters '
               'so we split it into multiple lines.')

2.2 공백 규칙

연산자 주변 공백

# 올바른 예시
x = 1
y = 2
long_variable = 3

# 잘못된 예시
x=1
y    = 2
long_variable    = 3

쉼표 후 공백

# 올바른 예시
def complex_function(x, y, z):
    pass

# 잘못된 예시
def complex_function(x,y,z):
    pass

2.3 명명 규칙

변수명 : snake case

  • 소문자 사용
  • 단어 사이는 언더스코어(_)로 구분
my_variable = 1
count_of_users = 10
first_name = "John"

함수명 : snake case

  • 소문자 사용
  • 단어 사이는 언더스코어로 구분
def calculate_average():
    pass

def get_user_info():
    pass

클래스명 : Pascal Case)

  • CapWords(Pascal Case) 컨벤션 사용
class UserAccount:
    pass

class DatabaseConnection:
    pass

상수

  • 대문자와 언더스코어 사용
MAX_CONNECTIONS = 100
DEFAULT_TIMEOUT = 30

2.4 제어문 스타일

if 문

# 올바른 예시
if x is not None:
    pass

if x == 4:
    print('x is 4')
elif x == 5:
    print('x is 5')
else:
    print('x is not 4 or 5')

# 잘못된 예시
if x!=None:
    pass

for 문

# 올바른 예시
for i in range(5):
    print(i)

# 리스트 컴프리헨션 (한 줄인 경우)
squares = [x**2 for x in range(10)]

# 리스트 컴프리헨션 (복잡한 경우)
squares = [
    x**2 
    for x in range(10) 
    if x % 2 == 0
]

2.5 주석 작성 규칙

인라인 주석

x = 5  # 이것은 인라인 주석입니다

# 잘못된 예시
x = 5# 공백이 없음

문서화 문자열 (Docstrings)

def complex_function(param1, param2):
    """이 함수는 복잡한 연산을 수행합니다.

    Args:
        param1 (int): 첫 번째 매개변수
        param2 (str): 두 번째 매개변수

    Returns:
        bool: 연산 성공 여부
    """
    pass

3. VS Code에서 PEP 8 설정하기

3.1 필수 플러그인

Python Extension Pack

  • Python 언어 지원
  • 기본적인 PEP 8 검사 기능 포함

Pylint

  • 코드 분석 도구
  • PEP 8 규칙 검사
    {
        "python.linting.pylintEnabled": true,
        "python.linting.enabled": true
    }
    

Flake8

  • PEP 8 스타일 가이드 검사
  • 구문 오류 검사
  • 복잡도 검사

  • 설치:
    pip install flake8
    
  • VS Code 설정:
    {
        "python.linting.flake8Enabled": true,
        "python.linting.enabled": true,
        "python.linting.flake8Args": [
            "--max-line-length=79",
            "--extend-ignore=E203",
            "--per-file-ignores=__init__.py:F401"
        ]
    }
    
  • .flake8 설정 파일 예시:
    • 심플 버전
      [flake8]
      # 행 길이 제한
      max-line-length = 79
      
      # 무시할 에러/경고
      ignore = E501 # 줄 길이 초과
      
    • 기본 버전
      [flake8]
      # 행 길이 제한
      max-line-length = 79
      
      # 무시할 에러/경고
      ignore =
          # 라인 끝 공백
          W291,
          # 모듈 레벨 import가 아닌 경우
          E402,
          # 라인 중간 공백
          E203,
          # 한 줄에 여러 문장
          E701,
          # break 이후 문장
          E722
      
      # 복잡도 제한
      max-complexity = 10
      
      # 파일별 무시할 규칙
      per-file-ignores =
          # __init__.py 파일의 미사용 import 무시
          __init__.py:F401
          # 테스트 파일의 긴 줄 무시
          test_*.py:E501
      
      # 파일 이름 패턴
      filename = *.py
      
      # 통계 출력
      statistics = True
      
      # 에러 카운트 출력
      count = True
      
      # 파이썬 버전 설정
      # python 버전을 명시적으로 지정
      max-python-version = 3.9
      
      # 인라인 설정 허용
      # flake8: noqa 주석 허용
      disable-noqa = False
      
    • flake8의 주요 에러 코드:
      • E1**: 들여쓰기 관련
      • E2**: 공백 관련
      • E3**: 빈 줄 관련
      • E4**: Import 관련
      • E5**: 줄 길이 관련
      • E7**: 문장 관련
      • E9**: 구문 에러
      • F4**: Import 관련
      • F5**: 루프 변수 정의
      • F6**: except 관련
      • F8**: 이름 정의
      • W291-W293: 공백 관련 경고
      • C901: 복잡도 관련

autopep8

  • 자동 코드 포맷팅
    pip install autopep8
    
  • VS Code 설정:
    {
        "python.formatting.provider": "autopep8",
        "editor.formatOnSave": true
    }
    

Black

  • 더 엄격한 자동 포맷팅 도구
    pip install black
    
  • VS Code 설정:
    {
        "python.formatting.provider": "black",
        "python.formatting.blackArgs": [
            "--line-length",
            "79"
        ]
    }
    

3.2 추천 VS Code 설정

{
    "editor.rulers": [79],
    "editor.detectIndentation": false,
    "editor.tabSize": 4,
    "editor.insertSpaces": true,
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.formatting.provider": "black",
    "editor.formatOnSave": true,
    "files.trimTrailingWhitespace": true
}

4. 결론

  • 초기에는 다소 엄격하게 느껴질 수 있지만, 이러한 규칙들은 코드의 가독성과 유지보수성을 크게 향상시킵니다.
  • VS Code의 다양한 도구들을 활용하면 PEP 8 규칙을 쉽게 준수할 수 있으며, 자동화된 포맷팅으로 개발 효율성도 높일 수 있습니다.

댓글남기기