services = Service.objects.all()
service_list = []
for service in services:
data = {
"title" : service.title,
"location" : service.location,
"content" : service.content
}
service_list.append(data)
그러면 여기서 리스트 컴프리헨션을 사용하면 얼마나 간결하게 바뀔 수 있을까?
우선, 리스트 컴프리헨션의 문법은 이러하다.
[출력표현식 for 요소 in 입력Sequence [if 조건식]]
배열을 먼저 만들고, for문 안에서 각 요소의 값을 할당하는 작업이 한 줄 안에 모두 가능하다.
여기서 출력표현식(output Expression)은 말 그대로 "i*i"와 같이 for문을 돌려서 최종적으로 출력하고자 하는 식을 이야기한다. 위의 예시에는 if 절이 없지만, 만약 if 절이 있다면 해당 요소가 조건에 부합하는지 아닌 지를 검사한 후, service_list라는 빈 리스트에 append되어, 결과적으로 service_list를 호출했을 때, 원하는 값을 얻을 수 있게 되는 것이다.
services = Service.objects.all()
service_list = [{
"title" : service.title,
"location" : service.location,
"content" : service.content
}for service in services]
위의 설명을 토대로 list comprehension을 적용하여 재작성한 코드이다.
이전의 코드 보다 한결 간결해진 느낌이라 보기에도 편한 것 같다.
이제 익숙해지도록 적용해보는 연습을 해봐야겠다.