728x90
λ°μν
νλ‘κ·Έλλ° μΈκ³λ₯Ό νꡬν©μλ€.
<μ΄ν°λ μ΄ν°(Iterator)>
νμ΄μ¬μμ λ°λ³΅ κ°λ₯ν κ°μ²΄(ν΄λμ€)λ₯Ό νννλλ° μ¬μ©λλ μΈν°νμ΄μ€ μ΄ν°λ μ΄ν°λ iter()ν¨μμ next()ν¨μλ₯Ό μ΄μ©νμ¬ λ°λ³΅(Inerator)μ μν
<μμ± μ½λ>
### ν΄λμ€ μ μνκΈ°
class MyIterator :
### ν΄λμ€ μμ±μ μ μνκΈ°
def __init__(self) :
self.current_value = 0
print(f"#1(__init__) : self = {self} / self.current_value={self.current_value}")
### μμ μ ν΄λμ€λ₯Ό λ°ννλ iter ν¨μ μ μ
def __iter__(self) :
print(f"#2(__iter__) : self = {self}")
return self
### λ°λ³΅μ μννλ next ν¨μ μ μ
def __next__(self) :
print(f"#3(__next__) : self = {self}")
# - current_value μ κ°μ 5 λ³΄λ€ μμ λ κΉμ§λ§ λ°λ³΅ μν
if self.current_value < 5:
# - λ±νν ν¨μμ current_valueμ νμ¬ κ° μ μ₯
result = self.current_value
# - current_value νμ¬ κ°μ 1 μ¦κ°
self.current_value += 1
print(f"#4(__next__) : self.current_value = {self.current_value}")
# - returen κ° λ°ν
return result
else :
print("#5 : StopIteration μμΈ λ°μ!!")
### μ΄ν°λ μ΄ν°λ λ°λ³΅μ΄ λλλ©΄ μ’
λ£ μμΌμΌ ν©λλ€.
# - μ’
λ£ μν€λ λ°©λ²μ κ°μ λ‘ μ€λ₯λ₯Ό λ°μμν΄(StopIteration)
raise StopIteration
### μ΄ν°λ μ΄ν° μ€νμν€κΈ°
# - ν΄λμ€ μμ±νκΈ°
my_iterator = MyIterator()
<μ€ν νλ©΄>
<μμ± μ½λ>
### μ΄ν°λ μ΄ν° κΈ°λ₯μ λ°λ³΅λ¬Έ(for or while)μ μ¬μ©ν΄μΌλ§ μλνλ κΈ°λ₯μ
# - μ΅μ΄ __iter__() ν¨μλ₯Ό νΈμΆνκ³ ,
# - μΆλ ₯ μ __next__()ν¨μκ° νλ²μ© μννλ©΄μ κ°μ λ°νλ°μμ μΆλ ₯ν¨
# - νλ² λ°νλ ν λ©λͺ¨λ¦¬λ μ΄κΈ°νλλ©°, λ€μ λ°λ³΅μ λ€μ λ©λͺ¨λ¦¬ μ¬μ©
# ** λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ νμ©ν μ μμ
# λ°λ³΅ μννμ¬ result κ° μΆλ ₯νκΈ°
for value in my_iterator :
print(value)
<μ€ν νλ©΄>
<μμ± μ½λ>
### μ΄ν°λ μ΄ν° μ€νμν€κΈ°
# - ν΄λμ€ μμ±νκΈ°
my_iterator = MyIterator()
<μ μ© νλ©΄>
<μμ± μ½λ>
print(next(my_iterator))
<μ μ© νλ©΄>
<μμ± μ½λ>
try :
print(next(my_iterator))
print(next(my_iterator))
print(next(my_iterator))
except :
print("μ΄ν°λ μ΄ν°κ° μ’
λ£λμμ΅λλ€.")
<μ€ν νλ©΄>
728x90
λ°μν