PythonNewFunction중 한가지. Generator구문. 2.4버젼부터 등장. 지원 씨 작성~

list compression과 유사하지만, 한번에 다 계산하지 않고 그때그때 계산된다는점이 특징.

주사위 두개를 던졌을 때, 그 합이 홀수가 되는 숫자쌍을 알고싶다고 할때, list comprehension을 쓰면,

   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에 한번만 계산한다. 훨씬 메모리상 효율이 좋다.

   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

GeneratorExpression (last edited 2012-06-19 14:41:19 by 61)

web biohackers.net