일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- DP
- w3school
- Class
- 시작해요 언리얼 2022
- String
- C#
- Basic
- dynamic
- Algorithm
- loop
- github
- c++
- 프로그래밍
- W3Schools
- 오류
- 재귀
- python
- Unity
- 기초
- UE5
- guide
- Programming
- Tutorial
- 파이썬
- Material
- 백준
- Unreal Engine 5
- dfs
- parameter
- 문제풀이
- Today
- Total
행복한 개구리
Python 공부내용 21.10.09. Python - Iterators(반복자) 본문
W3Schools의 Python Tutorial을 보며 해석하고 정리한 글입니다.
오역이 존재할 수 있습니다
저도 파이썬은 처음이니 가볍게 봐주세요 :D
파이썬 Iterators(반복자)
iterator(반복자)는 유한한 수의 값을 담는 객체입니다.
iterator는 반복할 수 있는 객체입니다. 즉 당신은 모든 값에 접근 수 있습니다.
기술적인 측면에서, 파이썬에서 반복자는 __iter__() 와 __next__() 메서드로 구성된 반복자 프로토콜을 실행하는 객체입니다.
Iterator vs Iterable (반복자 vs 반복가능)
리스트, 튜플, 딕셔너리, 세트는 반복 가능한 객체입니다. 이것들은 반복자 형식으로 받을 수 있는 반복 가능한 수용체입니다.
이 모든 객체들은 반복자에서 가져올 수 있는 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))
Iterator를 통해 반복하기
우리는 또한 for 반복문을 통해 반복 가능한 객체를 반복할 수 있습니다.
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
mystr = "banana"
for x in mystr:
print(x)
for 반복문은 사실 매 회 반복할 때마다 반복자 객체를 만들고 next() 메서드를 실행시킵니다.
반복자 생성하기
객체/클래스로써의 반복자를 생성하려면 당신의 객체에 __iter__() 와 __next__() 메서드를 구현해야 합니다.
당신이 파이썬 클래스/객체 챕터에서 배웠듯이 모든 클래스는 객체를 생성할 때 초기화해주는 __init__() 함수를 호출합니다.
__iter__() 메서드는 __init__() 과 비슷하게 작동합니다. 당신은 작업(초기화 등)을 수행할 수 있지만 반드시 항상 반복자 객체 그 자체를 반환해야 합니다.
__next__() 메서드는 당신이 작업을 수행할 수 있게 해줍니다. 그리고 반드시 다음 순서의 아이템을 반환해야 합니다.
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))
반복 멈추기
위 예시는 next() 선언만 충분히 해주거나 for 반복문을 사용했다며 평생이라도 지속될 것입니다.
반복자가 평생 지속되는 것을 방지하기 위해서 우리는 StopIteration 문을 사용합니다.
__next__() 메서드에서 우리는 만약 반복자가 일정 횟수만큼 실행되었다면 에러를 발생시키는 종료 조건을 추가할 수 있습니다.
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 5:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
'Python > 공부내용' 카테고리의 다른 글
Python 공부내용 21.10.13. Python - Modules (0) | 2021.10.13 |
---|---|
Python 공부내용 21.10.09. Python - Scope(범위) (0) | 2021.10.09 |
Python 공부내용 21.10.08. Python - Inheritance(상속) (0) | 2021.10.08 |
Python 공부내용 21.10.08. Python - Classes / Objects (0) | 2021.10.08 |
Python 공부내용 21.10.07. Python- Arrays (0) | 2021.10.07 |