'''
generator - reversed 직접 구현하기
배운 것
- 제너레이터 함수의 reference를 변수에 저장 후, next()를 사용할 때 넣어야 yield가 저장되어 차례차례 실행될 수 있다.
- list[::-1] : 값을 반전시킨다 (reverse)
'''
li = [3,44,1,5,6345]
# generator - reversed 직접 구현하기 - 1
def _reversed(li):
for i in list(range(len(li)-1, 0-1, -1)):
yield li[i]
print(list(_reversed(li)))
# generator - reversed 직접 구현하기 - 2
def _reversed(li):
for i in li[::-1]:
yield i
print(list(_reversed(li)))
# generator - reversed 직접 구현하기 - 테스트
'''def _reversed(li):
print(1)
yield 'a'
print(2)
yield 'b'
print(3)
yield 'c'
print(4)
yield 'd'
print(next(_reversed(li)))
print(next(_reversed(li)))
print(next(_reversed(li)))
print(next(_reversed(li)))'''
# 1 a 1 a 1 a 1 a
# 즉 처음부터 다시 실행된다. (새로운 객체가 할당되는 것으로 예상한다)
# generator - reversed 직접 구현하기 - 테스트
'''output = _reversed(li)
print(next(output))
print(next(output))
print(next(output))
print(next(output))'''
# 1 a 2 b 3 c 4 d
# 함수를 변수로 담아 그 변수를 사용해야 yield 기록이 저장된다 (같은 객체를 사용하기 때문이라고 예상한다)