콘텐츠로 건너뛰기

제너레이터(generator)

제너레이터는 뭘 만들어 주는건데 한 번에 다 만들어 주지는 않는다. 하나 만들고 쉬고 하나 만들고 쉰다. 요렇게 쉬라고 하는 명령어가 yield이며 쉬는 곳의 위치를 보여주려면 yield “위치”를 넣어주면 된다.

yield

def test():
    print("함수가 호출되었다")
    yield "test"

print("a 지점 통과 안함")
test()

print("b 지점 통과 안함")
test()

print(type(test()))
print(test())

yield 및 next()

def test():
    print("함수가 호출되었다")
    yield "test"

print("a 지점 통과 안함")
test()

print("b 지점 통과 안함")
test()

print(type(test())) #1차 콜
print(test()) #2차 콜

output=test() #3차 콜. 응답없다. 여기서는 generator로 output 객체를 사용하겠다는 의미. generator가 트리거다.
print(next(output)) #4차 콜. 여기만 작동된다.#test라는 곳에서 쉬고 있다는 것을 확인 할 수 있다.

yield, next() 및 StopIteration

next()를 계속하다가 쉬는 곳이 없을 때 나타나는 메세지다.

def test():
    print("함수가 호출되었다")
    yield "test"

print("a 지점 통과 안함")
test()

print("b 지점 통과 안함")
test()

print(type(test())) #1차 콜
print(test()) #2차 콜

output=test() #3차 콜. 응답없다. 여기서는 generator로 output 객체를 사용하겠다는 의미. generator가 트리거다.
print(next(output)) #4차 콜. 여기만 작동된다.#test라는 곳에서 쉬고 있다는 것을 확인 할 수 있다.
print(next(output)) #더이상 쉴 곳이 없다.
---------------------------------------------------------------------------
a 지점 통과 안함
b 지점 통과 안함
<class 'generator'>
<generator object test at 0x7f84fa672030>
함수가 호출되었다
test
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
Cell In[45], line 16
     14 output=test() #3차 콜. 응답없다. 여기서는 generator로 output 객체를 사용하겠다는 의미. generator가 트리거다.
     15 print(next(output)) #4차 콜. 여기만 작동된다.#test라는 곳에서 쉬고 있다는 것을 확인 할 수 있다.
---> 16 print(next(output)) #더이상 쉴 곳이 없다.

StopIteration: 

enumerate 함수에 next() 적용해보기

list_a = ["A", "B", "C"]
enum_obj = enumerate(list_a) # 튜플로 반환한다고 했다.

print(next(enum_obj))
print(next(enum_obj))
---------------------------------------------------------------------------
(0, 'A')
(1, 'B')

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다