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))