- [BW 30] 리스트를 반환하기보다는 제너레이터를 사용하라2024년 10월 30일
- 31514
- 작성자
- 2024.10.30.:52
리스트에 결과를 추가하고 반환하는 코드는 잡음이 많고, 모든 결과를 리스트에 다 저장해야 하므로 메모리를 많이 소진한다.
def index_words(text): result = [] if text: result.append(0) for index, letter in enumerate(text): if letter == ' ': result.append(index + 1) return result address = '서울특별시 양천구 목동동로 12길 60' result = index_words(address) print(result) >>> [0, 6, 10, 15, 19]
제네레이터를 사용하면 함수 내부에서 리스트와 상호작용하는 코드가 사라지므로 가독성이 좋아진다.
그리고 작업 메모리에 모든 입력과 출력을 저장할 필요가 없으므로 출력이 큰 시퀀스를 만들 수 있다.
def index_words_iter(text): if text: yield 0 for index, letter in enumerate(text): if letter == ' ': yield index + 1 it = index_words_iter(address) print(next(it)) print(list(index_words_iter(address))) >>> 0 [0, 6, 10, 15, 19]
이 함수가 호출되면 제네레이터 함수가 실제로 실행되지 않고 즉시 이터레이터를 반환한다.
이터레이터가 next 내장 함수를 호출할 때마다 다음 yield까지 실행시킨다.
단, 제네레이터가 반환하는 이터레이터에 상태가 있기 때문에 호출하는 쪽에서 재사용이 불가능하다.
'Book > 파이썬 코딩의 기술' 카테고리의 다른 글
[BW 32] 긴 리스트 컴프리헨션보다는 제네레이터 식을 사용하라 (2) 2024.11.01 [BW 31] 인자에 대해 이터레이션할 때는 방어적이 돼라 (1) 2024.10.31 [BW 29] 대입식을 사용해 컴프리헨션 안에서 반복 작업을 피하라 (0) 2024.10.29 [BW 28] 컴프리헨션 내부에 제어 하위 식을 세 개 이상 사용하지 말라 (0) 2024.10.28 [BW 27] map과 filter 대신 컴프리헨션을 사용하라 (0) 2024.10.28 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)