특징: 이게 제너레이터인지 모르고도 잘 쓰는 경우가 있다.
정의: 이터레이터를 직접 만들 때 사용하는 구문
*함수 내부에 yield 라는 키워드가 포함되면 해당 함수는 제너레이터가 됩니다.
next를 사용해야 (제너레이터가 출력된다)
예시)
def topten():
yield 1
yield 2
yield 3
yield 4
values = topten()
print(values.__next__())
print(values.__next__())
def topten():
n = 1
while n <= 10:
sq = n*n
yield sq
n += 1
values = topten()
for i in values:
print(i)
lazy evaluation 이란 무엇인지와 장점 및 리스트 컴프리헨션과의 차이점에 대하여 블로깅 해주세요.
import time
def print_iter(iter):
for element in iter:
print(element)
def lazy_return(num):
print("sleep 1s")
time.sleep(1)
return num
print("comprehension_list=")
comprehension_list = [ lazy_return(i) for i in L ]
print_iter(comprehension_list)
print("generator_exp=")
generator_exp = ( lazy_return(i) for i in L )
print_iter(generator_exp)
실행결과:
comprehension_list=
Traceback (most recent call last):
File "C:\Users\User\Desktop\Python practice\위코드\First month\Advanced Python\generator.py", line 39, in
comprehension_list = [ lazy_return(i) for i in L ]
NameError: name 'L' is not defined
Lazy evaluation:
제너레이터 함수가 실행될 때까지 계산을 미루는 것을 뜻한다, 즉 계산을 미뤄서 메모리 낭비가 발생하지 않는다.
vs list comprehension
반대로 우선 계산을 시작하고 마치게 된다.