(수업내용 : 우리는 for 루프를 이용하여 리스트 안의 요소들에 대하여 반복할 수 있었다.
- 또 문자열의 각 문자에 대해서도 반복할 수 있었으며 딕셔너리, 파일도 마찬가지였다
-
파이썬에서는 for 루프와 함께 사용할 수 있는 여러 종류의 반복 가능한 객체(iterable)가 있으며 이들 객체는 이
터레이터(iterator)이라고 불린다. 이터레이션(iteration)이 반복을 의미하므로 "반복가능한 객체”라고 해석할 수
있다.(list, tuple, range, dictionary, set)
for i in [1, 2, 3, 4]:
print( i, end=" ")
출력결과
1 2 3 4
) 이터레이터란?
- 객체가 반복 가능한 객체가 되려면 다음과 같은 2개의 메소드를 구현하여야 한다.
▶ __iter__()은 반복 가능한 객체 자신을 반환한다.
▶ __next__()은 다음 반복을 위한 값을 반환한다. 만약 더 이상의 값이 없으면 Stoplteration 예외를 발생하면
된다.
- 예를 들어서 MyCounter 클래스를 이터레이터 클래스로 정의해보자.앞의 이터레이터는 클래스를 이용하여 반복 가능한 객체를 생성하는 것이고 제너레이터
는 함수를 이용하여 반복 가능한 객체를 생성하는 것이다. MyCounter 클래스와 유사한
제너레이터 함수를 정의해보자.) for c in "
python":
print (c, end=" ")
출력결과
p y t h o n
class MyCounter(object):
# 생성자를 정의한다.
def __init__(self, low, high):
self.current = low
self.high = high
# 이터레이터 객체로서 자신을 반환한다.
def __iter__(self):
return self
def __next__(self):
# current가 high 보다 크면 StopIteration 예외를 발생한다.
# current가 high 보다 작으면 다음 값을 반환한다.
if self.current > self.high:
raise StopIteration
else:
self.current += 1
# self.current 가 1을 증가했지만 이전값을 c = MyCounter(1, 10)
for i in c:
print(i, end=‘’)
출력결과
1 2 3 4 5 6 7 8 9 10
좌측에서 정의된 MyCounter 객체를 for
루프에서 사용해보자.
제너레이터란?
-
파이썬 제너레이터는 2.3 버전부터 도입되었다. 제너레이터(generators)는 키워드 yield를 사용하여서 함수로부터
반복 가능한 객체를 생성하는 하나의 방법이다. 우리는 yield 문장을 사용하여 함수를 제너레이터로 만들 수 있다.
- 위의 예제에서 우리는 yield 문장을 사용하여 간단한 제너레이터를 생성하였다. 정의된 제너레이터를 for 루프에
서 이터레이터로 사용할 수 있다. 오늘도 수고 많으셨습니다. 항상 명쾌한 강의 잘 듣고 있습니다. 저도 강사님의 강의에 더욱 더 열심히 공부하여 좋은 저의 목표에 잘 도달하도록 노력하겠습니다 .감사합니다. ^^