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

댓글남기기