파이썬 반복자
파이썬 반복자
반복자는 셀 수 있는 값을 포함하는 개체입니다.
반복자는 반복될 수 있는 개체입니다. 즉, 모든 값을 순회할 수 있습니다.
기술적으로 Python에서 iterator는 반복자 프로토콜을 구현하는 객체이며 메서드 __iter__()
와 __next__()
.
반복자 대 반복 가능
목록, 튜플, 사전 및 집합은 모두 반복 가능한 개체입니다. 반복자를 얻을 수 있는 반복 가능한 컨테이너 입니다.
이 모든 객체에는 iter()
반복자를 얻는 데 사용되는 메서드가 있습니다.
예시
튜플에서 반복자를 반환하고 각 값을 인쇄합니다.
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
문자열조차도 반복 가능한 객체이며 반복자를 반환할 수 있습니다.
예시
문자열은 일련의 문자를 포함하는 반복 가능한 객체이기도 합니다.
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
반복자를 통한 루핑
for
루프를 사용하여 반복 가능한 객체를 반복 할 수도 있습니다 .
예시
튜플의 값을 반복합니다.
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
예시
문자열의 문자를 반복합니다.
mystr = "banana"
for x in mystr:
print(x)
루프 는 for
실제로 iterator 객체를 생성하고 각 루프에 대해 next() 메서드를 실행합니다.
반복자 생성
객체/클래스를 반복자로 생성하려면 메서드
__iter__()
와
__next__()
객체를 구현해야 합니다.
파이썬 클래스/객체 장 에서 배웠듯이 모든 클래스에는 __init__()
객체가 생성될 때 초기화를 수행할 수 있는 이라는 함수가
있습니다.
이 __iter__()
메서드는 비슷하게 작동하며 작업(초기화 등)을 수행할 수 있지만 항상 반복자 개체 자체를 반환해야 합니다.
이 __next__()
메서드를 사용하면 작업을 수행할 수 있으며 시퀀스의 다음 항목을 반환해야 합니다.
예시
1부터 시작하는 숫자를 반환하는 반복자를 만들고 각 시퀀스는 1씩 증가합니다(1,2,3,4,5 등 반환).
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
반복 중지
for
위의 예는 next() 문이 충분하거나 루프 에서 사용된 경우 영원히 계속됩니다
.
반복이 영원히 계속되는 것을 방지하기 위해
StopIteration
문을 사용할 수 있습니다.
메서드 에서 __next__()
반복이 지정된 횟수만큼 수행되면 오류를 발생시키는 종료 조건을 추가할 수 있습니다.
예시
20회 반복 후 중지:
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass =
MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)