제너레이터 란?
- generaotr 객체는 모든 값을 메모리에 올려두고 이용하는 것이 아니라 필요할 때마다 생성해서 반환하는 일을 한다.
- 이 때문에 메모리를 효율적으로 사용할 수 있다는 장점이 있다.
제너레이터를 이용한 for 문
my_generator = (x for x in range(1,4))
for n in my_generator:
print(n)
print(type(my_generator))
# 실 행 겨 과
1
2
3
<class 'generator'>
반복자와 동일한 일을 하는 것처럼 보이지만 여기에서 생성된 1,2,3을 미리 메모리에 만들어 두는 것이 아니라
for 문에서 필요로 할 때마다 my_generator로 받아오며 메모리에서 보관하지 않는다 이를 lazy evaluation 이라 한다)
Yield
일반적인 함수의 return 문과 유사하다.
하지만 yield문은 제너레이터를 반환한다는 점에서 return 문과 차이가 있다.
def create gen():
alist = range(1,4)
for x in alist:
yield x
my_generator = create_gen()
print(my_generator)
for n in my_generator:
print(n)
# 결과 값
<generator object create_gen at 0x7f~~~~~>
1
2
3
return문 대신 yield문을 가지고 있는 제너레이터
Return : 함수가 끝나면 return이 호출되고 호출된 이후는 사라진다.
Yield : 함수가 끝나도 값을 해당함수의 결과 같을 가지고 있다.
제너레이터 사용시 주의사항
- 제너레이터는 실행될 때 함수의 몸체를 실행하는 것이 아니라 제너레이터 함수가 가진 객체를 반환한다.
- 이전의 코드를 실행한 후 추가한 코드를 실행하면 아무런 객체도 출력되지 않는다.
def create gen():
alist = range(1,4)
for x in alist:
yield x
my_generator = create_gen()
print(my_generator)
for n in my_generator:
print(n)
#추가된 코드
for n in my_generator:
print(n)
# 결과 값
<generator object create_gen at 0x7f~~~~~>
1
2
3
'Python' 카테고리의 다른 글
[Python] Generator Or Iterator 코드 분석 실습 (0) | 2020.06.27 |
---|---|
[Python] 이터레이터(Iterator) (0) | 2020.06.27 |
[Python] 패키지 생성 실습 (0) | 2020.06.26 |
[Python] Sys modules (0) | 2020.06.25 |
[Python] funciton of arguments, parameter (0) | 2020.06.24 |
댓글