파이썬 개선제안 #8(Python Enhancement Proposal #8)은 파이썬 코드를 어떤 형식으로 작성할지 알려주는 스타일 가이드다.
이런 일관된 스타일을 사용하면 코드에 더 친숙하게 접근하고, 코드를 더 쉽게 읽을 수 있다.
파이썬에서 공백은 가독성을 높이고 코드를 보다 명확하게 작성하기 위해 사용됩니다.
for i in range(len(n)):
print(i)
if condition:
statement # 4 space
def a():
pass
#
# 공백 2칸
def b():
pass
#
#
class CLS_c:
class d:
def func1():
pass
# 공백 1칸
def func2():
pass
article = { 'title': 'jackson', 'age': 21 }
title: String
age: int
TF: boolean
PEP8은 파이썬 언어의 여러 부분에 사용하는 이름을 어떻게 붙일지에 대한 고유 스타일을 제공한다.
user_name = "John Doe"
age = 25
def calculate_area(length, width):
return length * width
class MyClass:
def __init__(self):
self._protected_attribute = 10
self.public_attribute = 20
def _protected_method(self):
# 보호되어야 할 메서드 내용
pass
def public_method(self):
# 공개 메서드 내용
pass
class MyClass:
def __init__(self):
self.__private_attribute = 10
def __private_method(self):
# 비공개 메서드 내용
pass
def public_method(self):
# 공개 메서드 내용
pass
class MyClass:
pass
class MyException(Exception):
pass
class MyCustomClass:
pass
MY_CONSTANT = 10
MAX_SIZE = 100
PI_VALUE = 3.14
class MyClass:
def instance_method(self):
# self를 사용하여 인스턴스 속성에 접근 가능
self.some_attribute = 10
print("This is an instance method.")
my_obj = MyClass()
my_obj.instance_method()
class MyClass:
@classmethod
def class_method(cls):
# cls를 사용하여 클래스 속성에 접근 가능
cls.some_attribute = 10
print("This is a class method.")
MyClass.class_method()
카멜케이스와 스네이크 케이스
카멜 케이스(CamelCase)와 스네이크 케이스(Snake_case)는 두 가지 일반적인 네이밍 스타일로서 변수, 함수, 클래스 등의 이름을 작성할 때 사용됩니다. 각각의 특징과 사용 예시를 비교해보겠습니다:카멜 케이스 (CamelCase):
- 각 단어의 첫 글자를 대문자로 작성하고, 나머지 글자는 소문자로 작성합니다.
- 단어 사이를 붙일 때 대문자를 사용하여 단어를 구분합니다.
- 주로 클래스 이름에 사용되며, 클래스 이름을 더 명확하고 가독성 있게 만듭니다.
예시:
MyClass
,calculateArea
,isUserLoggedIn
스네이크 케이스 (snake_case):
- 모든 글자를 소문자로 작성합니다.
- 단어 사이를 밑줄(underscore)로 구분합니다.
- 주로 변수, 함수, 모듈, 파일명 등에 사용되며, 가독성을 높이고 단어를 명확하게 구분합니다.
예시:
my_variable
,calculate_area
,is_user_logged_in
두 케이스 스타일 모두 코드 작성자의 개인적인 취향과 팀 또는 프로젝트의 컨벤션에 따라 선택될 수 있습니다. 중요한 점은 일관성을 유지하는 것입니다. 프로젝트에서 선택한 스타일을 따라 코드를 일관되게 작성하면 가독성을 향상시키고 협업이 원활해집니다. PEP 8에서는 스네이크 케이스를 변수, 함수, 모듈 등의 이름 작성에 권장하고 있지만, 클래스의 경우 카멜 케이스를 사용하는 것을 권장하고 있습니다.
‘파이썬의 선’ 에서는 문제를 해결할 명백한 방법이 하나 있으면, 가급적이면 유일해야 한다고 언급한다. PEP 8은 이런 가르침을 따라 식과 문장을 작성 하는 스타일 규칙을 다음과 같이 정했다.
# 잘못된 예:
if not a is b:
# 코드 내용
# 올바른 예:
if a is not b:
# 코드 내용
my_list = []
my_dict = {}
my_string = ""
# 잘못된 예:
if len(my_list) == 0:
# 리스트가 비어있을 때 수행할 작업
if len(my_dict) == 0:
# 딕셔너리가 비어있을 때 수행할 작업
if len(my_string) == 0:
# 문자열이 비어있을 때 수행할 작업
# 올바른 예:
if not my_list:
# 리스트가 비어있을 때 수행할 작업
if not my_dict:
# 딕셔너리가 비어있을 때 수행할 작업
if not my_string:
# 문자열이 비어있을 때 수행할 작업
my_list = [1, 2, 3]
my_string = "hi"
# 잘못된 예:
if len(my_list) > 0:
# 리스트가 비어있지 않은 경우 수행할 작업
if len(my_string) > 0:
# 문자열이 비어있지 않은 경우 수행할 작업
# 올바른 예:
if my_list:
# 리스트가 비어있지 않은 경우 수행할 작업
if my_string:
# 문자열이 비어있지 않은 경우 수행할 작업
# 잘못된 예:
if condition: do_something()
# 잘못된 예:
for item in my_list: process(item)
# 잘못된 예:
try: do_something()
except SomeException: handle_exception()
# 올바른 예:
if condition:
do_something()
# 올바른 예:
for item in my_list:
process(item)
# 올바른 예:
try:
do_something()
except SomeException:
handle_exception()
# 잘못된 예:
result = (value1 + value2 - value3 * value4 + value5) / (value6 + value7) - value8
# 올바른 예:
result = (
(value1 + value2 - value3 * value4 + value5) /
(value6 + value7) - value8
)
# 잘못된 예:
is_valid = (input_value > 0 and input_value < 10) or (input_value == 0)
# 올바른 예:
is_valid = (
(input_value > 0 and input_value < 10) or
(input_value == 0)
)
# 잘못된 예:
max_value = (value1 if value1 > value2 else value2) if value1 > value3 else value3
# 올바른 예:
max_value = (
(value1 if value1 > value2 else value2)
if value1 > value3
else value3
)
# 잘못된 예:
result = value1 + \
value2 - \
value3 * \
value4
# 올바른 예:
result = (value1 +
value2 -
value3 *
value4)
PEP 8은 모듈 임포트해 코드에 사용하는 방법에 대해서도 가이드 라인을 제공한다.