한 단계는 한 가지 변환만 맡아
읽기, 정리, 파싱, 필터링, 변환을 작은 제너레이터로 나누면 각 단계가 반복값을 받아 반복값을 내줘. 그러면 단계를 조합해도 전체 입력을 중간 리스트에 담지 않아.
지연 실행은 메모리 절약 이상의 계약이야
큰 원본을 조금씩 다룰 수 있고, 소비자가 멈추면 앞 단계도 더 일하지 않아. 대신 제너레이터를 만들 때 본문이 실행되지 않으므로 예외와 부수 효과도 실제 소비 시점까지 미뤄져.
구체화 지점을 의식적으로 정해
중간에 list를 만들면 그곳에서 전체 흐름이 한꺼번에 계산돼. 정렬·다중 소비·길이 확인처럼 정말 필요한 경계에서만 구체화하고, 그렇지 않으면 마지막 소비자까지 흐르게 둬.
주의: 지연된 I/O는 파일 수명, 취소, 제한시간도 소비 시점까지 끌고 와. 열린 자원의 경계를 파이프라인보다 짧게 만들지 마.