제너레이터는 뭘 만들어 주는건데 한 번에 다 만들어 주지는 않는다. 하나 만들고 쉬고 하나 만들고 쉰다. 요렇게 쉬라고 하는 명령어가 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')