Post

PEP-8

PEP-8

PEP-8은 Python Enhancement Proposal의 약자로, Python 코드를 어떻게 작성해야 하는지에 대한 스타일 가이드를 제공하여, 코드의 가독성을 높이고 Python 커뮤니티 내에서 코드 스타일의 일관성을 유지하는 데 목적이 있다. 여기에는 변수명, 함수명의 작명 규칙부터 들여쓰기, 줄 바꿈, 주석 처리 방법 등 다양한 코딩 관행에 대한 지침이 포함된다.

여기서 “8”은 단순히 이 제안이 파이썬 개선 제안 시스템에서 8번째로 등록된 문서라는 것을 의미

들여쓰기 (Indentation)

  • 규칙: 4개의 공백을 사용해 들여쓰기한다.
1
2
3
def my_function():
    if x == 4:
        print(x)

최대 줄 길이 (Maximum Line Length)

  • 규칙: 한 줄은 최대 79자로 제한한다.
1
2
3
4
5
6
7
# 함수 호출 시 인자를 여러 줄로 나누어 표현
result = my_function_with_many_arguments(arg_one, arg_two, arg_three,
                                         arg_four, arg_five, arg_six,
                                         arg_seven, arg_eight)

# 한 줄에 모든 인자를 포함하여 79자를 초과
result = my_function_with_many_arguments(arg_one, arg_two, arg_three, arg_four, arg_five, arg_six, arg_seven, arg_eight)

빈 줄 사용 (Blank Lines)

  • 규칙: 함수와 클래스 사이에는 2개의 빈 줄을 사용하고, 클래스 내의 메소드 사이에는 1개의 빈 줄을 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys


def function_one():
    pass


def function_two():
    pass


class MyClass:
    def method_one(self):
        pass

    def method_two(self):
        pass


def another_function():
    pass

임포트 (Imports)

  • 규칙: 임포트는 파일의 상단에 단독으로 배치하고, 표준 라이브러리 모듈, 관련 외부 모듈, 로컬 애플리케이션/라이브러리 특정 모듈 순으로 그룹화하여 각 그룹 사이에 빈 줄을 넣는다.
1
2
3
4
5
6
7
8
9
10
11
12
# 표준 라이브러리 모듈
import os
import sys
from datetime import datetime

# 관련 외부 모듈
import numpy as np
import requests

# 로컬 애플리케이션/라이브러리에 특정한 모듈
from my_local_module import my_local_function
import my_project.my_module

공백 (Whitespace)

  • 규칙
    • 괄호, 중괄호, 대괄호 안은 공백을 넣지 않는다.
    • 쉼표, 콜론, 세미콜론 앞에는 공백을 넣지 않고, 이들 뒤에는 하나의 공백을 넣는다.
    • 할당(=) 및 비교(==, <, > 등) 연산자 주변에는 스페이스를 1개 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
# 괄호 안에 공백 없음
my_list = [1, 2, 3]
my_dict = {'key': 'value', 'another_key': 'another_value'}
my_tuple = (1, 2, 3)

# 쉼표, 콜론, 세미콜론 뒤에 공백 한 개 사용
for i in range(1, 11):
    print(i, end=', ')

# 할당 및 비교 연산자 주변에 공백 한 개 사용
x = 10
if x == 10:
    print('x is 10')

주석 (Comments)

  • 규칙
    • 명확하고 정보를 잘 전달하는 주석을 달며, 오해의 소지가 없도록 한다.
    • 불필요한 주석을 달지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
# 함수의 목적을 명확하게 설명하는 주석
def calculate_area(width, height):
    """
    사각형의 넓이를 계산합니다.

    Parameters:
    width (int): 사각형의 너비
    height (int): 사각형의 높이

    Returns:
    int: 사각형의 넓이
    """
    return width * height

명명 규칙 (Naming Conventions)

  • 규칙
    • 함수명과 변수명: 소문자와 언더스코어를 사용(lower_case_with_underscores)
    • 클래스명: 카멜케이스(CamelCase)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 함수명과 변수명에 소문자와 언더스코어 사용
def calculate_area(width, height):
    area = width * height
    return area

# 클래스명에 카멜케이스 사용
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def calculate_area(self):
        return self.width * self.height

# 변수명 사용 예
rectangle_width = 10
rectangle_height = 20

# 클래스 인스턴스 생성 예
my_rectangle = Rectangle(rectangle_width, rectangle_height)
print(my_rectangle.calculate_area())

표현식과 문장 (Expressions and Statements)

  • 규칙
    • 가능한 한 비교는 간결하게 한다.
    • 예를 들어, if some_list:는 if len(some_list) != 0:보다 선호된다.
1
2
3
4
5
6
7
8
9
# 간결한 비교를 사용하여 리스트가 비어 있는지 확인
some_list = [1, 2, 3]
if some_list:
    print("리스트에 요소가 존재합니다.")

# 불리언 표현식을 사용하여 변수가 None인지 확인
my_variable = None
if my_variable is None:
    print("my_variable은 None입니다.")

줄 바꿈과 이어쓰기 (Line Breaks and Binary Operators)

  • 규칙: 긴 표현식을 줄 바꿈할 때는, 이항 연산자 앞에서 줄을 바꾼다.
1
2
3
4
5
6
# 이항 연산자 앞에서 줄 바꿈
total = (first_variable
         + second_variable
         - third_variable
         * fourth_variable
         / fifth_variable)

문자열 인용 (String Quotes)

  • 규칙:
    • Python에서는 단일 인용문(‘)과 이중 인용문(“)을 모두 문자열에 사용할 수 있다.
    • 문자열 내에 단일 인용문이나 이중 인용문을 사용해야 하는 경우를 제외하고, 선택한 스타일을 일관되게 사용한다.
1
2
3
4
5
6
7
8
# 단일 인용문을 일관되게 사용
greeting = 'Hello, World!'

# 문자열 내에 이중 인용문이 필요한 경우 단일 인용문 사용
quote = 'Python is "awesome" for beginners.'

# 문자열 내에 단일 인용문이 필요한 경우 이중 인용문 사용
response = "It's a great day for coding!"
This post is licensed under CC BY 4.0 by the author.