최근에 기초~중급 수준의 내용으로 정모를 가졌어요. 물론, 저희 60coding은 클래스 모임이 아닌 코딩 공부(주제는 미리 공지) 리뷰와 잡담 위주의 모임을 추구합니다. 60Coding의 최민진 멘토님이 주관한 모임이었습니다. 모임에는 현업 종사자인 분도 참석해주셨고 아래와 같은 내용을 다뤘어요. 정말 즐거운 시간이었어요!
Iterable
- Iterable은 순회할 수 있는 모든 객체를 가리킨다. 다른 말로 하면 파이썬에서 for 문의 in 키워드 뒤에 올 수 있는 모든 값은 Iterable이다. 그러면 list, tuple, set, dict는 말할 것도 없고 문자열, 파일 등도 Iterable이라고 할 수 있다.
Iterator
- 요소가 복수인 컨테이너(리스트, 튜플, 셋, 사전, 문자열)에서 각 요소를 하나씩 꺼내 어떤 처리를 수행할 수 있도록 하는 간편한 방법을 제공하는 객체
- 반환할 수 있는 마지막 값까지 원소를 하나씩 반환
Generator
- iterator의 한 종류로, 하나의 요소를 꺼내려고 할 때마다 요소 generator를 수행하는 타입으로, Python에서는 yield문을 통해 구현하는 것이 보통
- 여러 개의 데이터를 미리 만들어 놓지 않고 필요할 때마다 즉석해서 하나씩 만들어낼 수 있는 객체
Comprehension
Generator Comprehension
- 리스트 표현식(list comprehension)과 사용 방법이 매우 유사한데요. 단지 차이점이라고 하면 리스트 표현식은 대괄호를 사용하고 제너레이터 표현식은 소괄호를 사용
Comprehension 실무 예제
if 'personalTags' in result and result['personalTags']:
keyword.extend([personal for personal in result['personalTags']])
if 'featureTags' in result and result['featureTags']:
keyword.extend([feature for feature in result['featureTags']])
condition = {'noteInfo.id': {'$in': [post['post_id'] for post in posts]}}
- c.f. if else 삼항연산자
condition = _get_condition() if not is_brand else _get_brand_condition()
Yield
yield
키워드를 사용하면 제너레이터를 반환- 메모리 효율 측면에서도 이 두가지 방식은 큰 차이를 보이는데요.
return
키워드를 사용할 때는 모든 결과 값을 메모리에 올려놓아야 하는 반면에,yield
키워드를 사용할 때는 결과 값을 하나씩 메모리에 올려놓습니다. yield from
를 사용하면 리스트를 바로 제너레이터로 변환할 수 있음.