PEP-8
PEP-8은 Python Enhancement Proposal의 약자로, Python 코드를 어떻게 작성해야 하는지에 대한 스타일 가이드를 제공하여, 코드의 가독성을 높이고 Python 커뮤니티 내에서 코드 스타일의 일관성을 유지하는 데 목적이 있다. 여기에는 변수명, 함수명의 작명 규칙부터 들여쓰기, 줄 바꿈, 주석 처리 방법 등 다양한 코딩 관행에 대한 지침이 포함된다.
여기서 “8”은 단순히 이 제안이 파이썬 개선 제안 시스템에서 8번째로 등록된 문서라는 것을 의미
들여쓰기 (Indentation)
1
2
3
| def my_function():
if x == 4:
print(x)
|
최대 줄 길이 (Maximum Line Length)
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')
|
- 규칙
- 명확하고 정보를 잘 전달하는 주석을 달며, 오해의 소지가 없도록 한다.
- 불필요한 주석을 달지 않는다.
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!"
|