nums = [i for i in range(10)] print(nums) # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
nums = (i for i in range(10)) print(nums) # 출력: <generator object <genexpr> at 0x...> print(list(nums)) # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
가장 큰 특징은 모든 메모리에 값을 전부 올리지 않는다.
즉 파일을 읽을 때에도
lines = (line.strip() for line in open('large_file.txt')) for line in lines: print(line) # 파일의 각 줄을 메모리 효율적으로 읽음
generator expression은 미리 모든 값을 계산하지 않고 필요할 때마다 값을 그때그때 계산하기 때문에 수행 시간이 긴 연산을 필요한 순간까지 늦출 수 있고 메모리를 절약할 수 있다.
제너레이터는 대규모 데이터 처리와 메모리 효율성이 중요한 상황에서 강력한 도구.
리스트 컴프리헨션이 단기적이고 작은 데이터 세트에 적합하다면,
제너레이터는 대량의 데이터와 스트리밍 데이터에 이상적.