python
[python] generator
전감자(◔◡◔)
2022. 9. 22. 22:41
'''
*generator
특징 : 한 번에 한 개만 생성
생성된 항목을 사용하면 제거됨.
-next() 함수 또는 for문을 사용해서 값을 얻을 수 있다.
-대표적인 generator는 range()이고
커스텀 generator는 다음 문법을 이용한다.
gen=(표현식 for 변수 in 리스트)
next(gen) 형식으로 값을 하나씩 얻는다.
for v in gen:
print(v)
(x for x in range (5))
'''
#리스트 제너레이션 vs 제너레이션
x=[v for v in range(5)]
print(x)#[0, 1, 2, 3, 4]
print(x[0])
print(x[1])
print(x[2])
print(x[3])
print(x[4])
y=(v for v in range(5))
print(y)#<generator object <genexpr> at 0x00000214BF0AAB30>
print(next(y))
print(next(y))
print(next(y))
print(next(y))
print(next(y))
#print(next(y)) 에러발생 이전에 항목을 모두 소진했기 때문이다.
y=(v for v in range(10,16))
for v in y:
print(v)
'''
range() generator
'''
z=range(5)
print(z)#range(0, 5)
print(list(z))#[0, 1, 2, 3, 4]
#print(next(z)) 에러발생 range는 반복개체가 아니라 next()를 못씀
#그래서 반복가능한 iterator로 만들어야함
print(next(iter(z)))#0
print(next(iter(z)))#0 계속 iter를 쓰는게 아니라
k=range(5)
iterator=iter(k)#iter를 한 번만 쓰고 계속 next
print(next(iterator))
print(next(iterator))
print(next(iterator))