제너레이터(Generator)
1. 기존 방식
######################################### 기본 예제result =for i in nums:return resultmy_nums =print(my_nums)print()>>> 출력결과>> <class 'list'>>######################################### 제너레이터로 만들기for i in nums:yield i * imy_nums =print(my_nums)>>> 출력결과> <generator object square_numbers at 0x7eff006e1f10>
2. 제너레이터 만들기
by_list_comprehension =by_generator = ( x * x for x in )print(by_list_comprehension)print(by_generator)
제너레이터는 괄호 ( )
를 이용하면 만들 수 있습니다.
제너레이터를 출력하는 법은 #3
에서 알아보도록 하겠습니다.
3. 제너레이터 출력하기
똑같은 기능을 하는 것 같지만 아래 예제는 generator objectd
를 만들어낸다.
제너레이터(generator)의 값을 출력하기 위해서는 next
라는 특이한 명령어를 이용한다.
3-1. next를 이용해 출력하기
print(next(my_nums))
를 입력해보면 1
이 출력된다.
다음 값을 출력하기 위해서는 한번 더 print(next(my_nums))
를 입력해야 한다.
그렇게 총 5번을 입력하고 6번째
에는 더 이상 전달할 값이 없다는 의미StopIteration
이 출력된다.
3-2. for문을 이용해 출력하기
제너레이터를 출력하기 위해서는 보통 for
문을 이용한다.
for i in nums:yield i * imy_nums =for num in my_nums:print(num)
3-3 list로 변환해서 출력하기
by_generator = ( x * x for x in )print(by_generator)print()>>> 출력결과> <generator object <genexpr> at 0x1006c8f50>>
리스트로 변환하면 쩨너레이터가 갖는 퍼포먼스를 잃으니 주의하자.
4. 제너레이터의 퍼포먼스
num =
위와 같이 작은 수의 리스트 컴프리헨션은 괜찮다.
하지만 자료가 만 개, 백 만개 정도라면 제너레이터 표현식을 권장한다.
제너레이터 표현식은 출력 시퀀스를 메모리에 로딩하지 않는다.
iterator
로 한 번에 한 출력만 만들기 때문이다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
[파이썬] 정규표현식(regular expression) (6) | 2017.05.27 |
---|---|
[파이썬] get/set 속성값과 프로퍼티(property) (3) | 2017.05.23 |
[파이썬] 데코레이터(Decorator) 이해하기 (3) | 2017.05.21 |
[파이썬] 클로져(Closure) 이해하기 (1) | 2017.05.20 |
[파이썬] 일등 함수(first-class citizen) 이란? (2) | 2017.05.19 |