PythonNewFunction중 한가지. Generator구문. 2.4버젼부터 등장. 지원 씨 작성~
list compression과 유사하지만, 한번에 다 계산하지 않고 그때그때 계산된다는점이 특징.
주사위 두개를 던졌을 때, 그 합이 홀수가 되는 숫자쌍을 알고싶다고 할때, list comprehension을 쓰면,
Toggle line numbers
1 >>> [(x,y) for x in (1,2,3,4,5,6) for y in (1,2,3,4,5,6) if (x+y)%2==1]
2 [(1, 2), (1, 4), (1, 6), (2, 1), (2, 3), (2, 5), (3, 2), (3, 4), (3, 6),
3 (4, 1), (4, 3), (4, 5), (5, 2), (5, 4), (5, 6), (6, 1), (6, 3), (6, 5)]
로 한줄에 표현가능. 그러나, list comprehension은 결과물이 [Iterator]가 아니다. 즉, 모든 결과물을 한번에 계산하고, 계산결과를 메모리상에 가지고 있다가 한번씩 내뱉는셈. [Generator]는 이 단점을 극복. 한 iteration에 한번만 계산한다. 훨씬 메모리상 효율이 좋다.
Toggle line numbers
1 >>> [(x,y) for x in (1,2,3,4,5,6) for y in (1,2,3,4,5,6) if (x+y)%2==1] # list comprehension
2 >>> ((x,y) for x in (1,2,3,4,5,6) for y in (1,2,3,4,5,6) if (x+y)%2==1) # GeneratorExpression