01. Pythonic
파이써닉하게 코드를 짜는 습관을 기르자
PEP8 스타일 가이드를 따르자.
긍정적인 식을 부정하지말고, 부정을 내부에 넣자
temp = None
lst = []
# 안좋은 예
if not temp is None:
return
if not temp in lst:
return
# 바른 예
if temp is not None:
return
if temp not in lst:
return
빈 컨테이너([]
) 나 시퀀스 (''
) 를 검사할 때 길이를 0과 비교하지말라.
빈 컨테이너나 시퀀스 값이 암묵적으로 False
처리 된다는 사실을 활용하자.
temp = ''
lst = []
# 안좋은 예
if temp == '':
return
if lst == []:
return
# 바른 예
if not temp:
return
if not lst:
return
비어 있지 않은 컨테이너나 시퀀스를 검사할 때 길이를 0과 비교하지말라.
비어있지 않은 컨테이너나 시퀀스 값은 암묵적으로 True
처리 된다는 사실을 활용하자.
temp = 'hello'
lst = [1]
# 안좋은 예
if len(temp) > 0:
return
if len(lst) > 0:
return
# 바른 예
if temp:
return
if lst:
return
식을 한줄안에 다 쓰기 힘든 경우, 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기를 추가해서 읽기 쉽게 만들라
# 안좋은 예
if this_is_one_thing and that_is_another_thing and third_thing:
do_something()
# 바른 예
if (this_is_one_thing
and that_is_another_thing
and third_thing):
do_something()
여러 줄에 걸쳐 식을 쓸 때는 줄이 계속된다는 표시를 하는 \
문자보다는 괄호를 사용하라
# 안좋은 예
products = Product.objects.filter(name__icontains='아이폰') \
.filter(price__gte=5000)
# 바른 예
products = (
Product.objects.filter(name__icontains='아이폰')
.filter(price__gte=5000)
)
import 순서를 지켜가며 사용하자.
# 안좋은 예
import redis
import pillow
from .my_module import my_function
import django
from core.service import MyService
pass
# 바른 예 (절대 경로 import 권장)
import redis
import pillow
import django
from core.my_module import my_function
from core.service import MyService
pass
str ==> byte : encode
byte ==> str : decode
def to_str(value: Union[str, bytes]) -> str:
if isinstance(value, bytes):
return value.decode('utf-8')
return value
def to_bytes(value: Union[str, bytes]) -> bytes:
if isinstance(value, str):
return value.encode('utf-8')
return value
댓글남기기