해당 개념은 완벽하게 이해되지는 않지만 사용하고 있는 문법이다.
이번 기회에 이해를 완벽하게 해보자!
반복 가능한 객체를 의미한다.
for문을 이용하여 객체 안의 항목을 하나씩 가져올 수 있다.
ex) string, list, tuple, dic, set, range()의 결과값
# iterable 객체
for i in range(3):
print(i, end=" ")
>>> 0 1 2
# iterable 객체
for i in ["토요일", "일요일"]:
print(i, end=" ")
>>> 토요일 일요일
iterable 한 객체가 iter() 함수를 통해 iterator 객체로 생성된다.
# iterator 객체
x = ["토요일", "일요일"]
print(type(x))
>>> <class 'list'>
x = iter(x)
print(type(x))
>>> <class 'list_iterator'>
y = next(x)
print(y)
>>> 토요일
y = next(x)
print(y)
>>> 일요일
iter()함수를 통해 iterator 객체로 변환하였다면 next() 함수를 사용하여 iterator 객체의 항목을 하나씩 출력할 수 있다.
iterator를 생성하는 함수이다.
일반적인 함수와 같은 형태를 갖고 있으나 return 대신에 yield를 사용한다.
yield 문을 만나면 그 상태로 정지하고 값을 호출한 쪽으로 반환한다. next()가 호출될 때 마다 제너레이터의 실행이 중지된 곳에서 실행이 재개된다.next()함수를 실행할 때 값을 생성하여 메모리에 적재하므로 효율적으로 메모리를 사용할 수 있다. def gen():
print("첫 번째")
yield # return가 비슷하지만 다음 호출은 아래부터 실행 (return은 처음부터)
print("두 번째")
yield 2
g = gen()
y1 = next(g) # (1)
print(y1)
y2 = next(g) # (2)
print(y2)
yield문까지의 명령이 실행된 후 호출한 곳으로 리턴한다. (1)yield문까지의 명령이 실행된 후 호출한 곳으로 리턴한다. (2)