π‘ μ λλ μ΄ν°(Generator)λ?
- 루νμ λ°λ³΅(Iteration) λμμ μ μ΄ν μ μλ λ£¨ν΄ ννμ΄λ€.
- μ΄ν°λ μ΄ν°(Iterator)μ μ μ¬ν λ°©μμΌλ‘ λμνλ μμ°ν λ€λ₯΄λ€.
- μ»΄ν리ν¨μ λ¬Έλ²μ μ¬μ©ν΄μ μμ±ν μ μλ€. (by 'μ λλ μ΄ν° ννμ(generator expression)')
- ν¨μ λ¬Έλ²μ μ¬μ©ν΄μ μμ±ν μ μλ€.
β» [μ°Έκ³ ] λ°λ³΅κ°λ₯κ°μ²΄(Iterable)κ³Ό μ΄ν°λ μ΄ν°(Iterator)
β μ μ
- λ°λ³΅κ°λ₯κ°μ²΄(Iterable)
: μμλ₯Ό νλ²μ νλμ© κ°μ Έμ¬ μ μλ κ°μ²΄λ₯Ό μλ―Ένλ€.
: ν΄λΉ μλ£νμΌλ‘λ '리μ€νΈ, λμ λ리, νν, λ¬Έμμ΄, μ , range, map''λ±μ΄ μλ€.
: λ°λ³΅κ°λ₯κ°μ²΄μ κ²½μ° νμ΄μ¬ λ΄μ₯ν¨μμΈ 'iter()'μ μ΄μ©ν΄ λ°λ³΅μ κ°μ²΄λ‘ λ§λ€ μ μλ€.
l = [10, 20, 30] l_iter = iter(l) # λ°λ³΅ κ°λ₯ μλ£ν n = 100 n_itr = iter(n) # λ°λ³΅ λΆκ°λ₯ μλ£ν => μλ¬ λ°μ ('int' object is not iterable) - μ΄ν°λ μ΄ν°(Iterator)
: 'λ°λ³΅μ'λΌκ³ λ λΆλ¦¬λ©°, λ°λ³΅κ°λ₯κ°μ²΄μμ κ° μμλ₯Ό νλμ© κΊΌλ΄κ² νλ κ°μ²΄μ΄λ€.
: λ°λ³΅ κ°λ₯ν κ°μ²΄(Iterable)μ μμ°ν λ€λ₯Έ κ°μ²΄μ΄λ€.
: '__iter__', '__next__' λ©μλλ₯Ό κ°μ§λ©° next λ©μλλ₯Ό ν΅ν΄ μμλ₯Ό μμ°¨μ μΌλ‘ κΊΌλΈλ€.
β λμ κ³Όμ
: λ°λ³΅ κ°λ₯ κ°μ²΄ → iter() ν¨μ → λ°λ³΅μ κ°μ²΄(iterator) → next() ν¨μ/Stop
- λ°λ³΅ κ°λ₯ν κ°μ²΄(Iterable)κ° '__iter__' λ©μλλ₯Ό μ¬μ©νμ¬ μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©ν μ μλλ‘ μ μνλ€.
- κ·Έ ν μ΄ν°λ μ΄ν°μ '__next__' λ©μλλ₯Ό ν΅ν΄ μμλ₯Ό νλμ© μΆλ ₯νλ©° μ΄λ₯Ό λ°λ³΅νλ€.
- μμκ° λͺ¨λ μΆλ ₯λκ³ λ μ΄μ μΆλ ₯ν μμκ° μμ κ²½μ° StopIteration μμΈ μλ¬μ ν¨κ» λ°λ³΅μ μ’ λ£νλ€.

β μ²΄νΉ λ°©λ²
λ°λ³΅μ λ° λ°λ³΅κ°μ²΄μ μ¬λΆ 체νΉ
→κ°μ²΄μ '_iter_' λ©μλκ° μλμ§ μ¬λΆλ₯Ό 체νΉνλ©΄ λ¨. by'dir()'
# dir() : μΈμμΈ κ°μ²΄κ° μ΄λ€ λ³μμ λ©μλ(method)λ₯Ό κ°μ§κ³ μλμ§ λμ΄ν΄μ£Όλ νμ΄μ¬μ λ΄μ₯ν¨μ.
check = dir([1, 2, 3])
print(check)
+ 'μνμ€ κ°μ²΄'μ 'λ°λ³΅κ°λ₯ν κ°μ²΄' λΉκ΅
- μνμ€ κ°μ²΄ : μμ X. λ°λ³΅ κ°λ₯ O.
- λ°λ³΅κ°λ₯κ°μ²΄ : μμ O. λ°λ³΅ κ°λ₯ O.

βͺοΈ μ λλ μ΄ν°(Generator) vs μ΄ν°λ μ΄ν°(Iterator)
| μ λλ μ΄ν°(generator) | μ΄ν°λ μ΄ν° (iterator) |
| - ν¨μ μμμ yieldλΌλ ν€μλλ§ μ¬μ©νλ©΄ ꡬν μλ£. - __next__ λ©μλ λμμ, yieldμμ μ§μ ν κ°μ΄ λ°νλ¨. - ν¨μμ λ λλ¬μ μλμΌλ‘ StopIteration μμΈκ° λ°μ. - μ¬λ¬λ² κ°μ κ°μ Έμ¬ μκ° μλ€. (κ° μλΉ. μ΄μ /μ΄ν κ° X) - λ©λͺ¨λ¦¬λ₯Ό λΉκ΅μ μ κ² μ¬μ©νλ€. -νλμ ν¨μμμ μ¬λ¬ νμ μ κ° μμ± κ°λ₯. |
- __iter__, __next__,__getitem__ λ©μλλ€ κ΅¬ν μꡬ. - __next__ λ©μλ λμμ, μ§μ returnμΌλ‘ κ°μ λ°νν¨. - λ°λ³΅ μ’ λ£μ raiseλ‘ StopIterationλ₯Ό μ§μ λ°μμν΄. - μ¬λ¬λ² κ°μ κ°μ Έμ¬ μκ° μλ€. - λ©λͺ¨λ¦¬λ₯Ό λΉκ΅μ λ§μ΄ μ¬μ©νλ€. -νλμ ν¨μλ νλμ κ°λ§ μ·¨κΈ. |
β» [μΆκ°μλ£] Iterator vs Generator's λμ λ°©μ λΉκ΅
β Iteratorμ λμ λ°©μ

→ λͺ¨λ λμμ μλ£ν ν κ²°κ³Όλ₯Ό νλ²μ λ©λͺ¨λ¦¬ μ μ¬ μν΄.
β Generatorμ λμ λ°©μ


→ κ°κ°μ yieldμμ ν λ² μ€νμν¨ ν λκΈ° μνμ λ€μ΄κ° κ²°κ³Όλ₯Ό λ°νν¨.
→ μ΄ν λ€μ μ½λλ₯Ό μ§ννμ¬ λ λ€μ yieldλ₯Ό λ§λ κ²½μ° λκΈ° μνμ λ€μ΄κ° κ²°κ³Όλ₯Ό λ°νν¨.
βͺοΈ μ λλ μ΄ν°(Generator)μ νΉμ§ λ° μ₯μ
'μμμ 쑰건μΌλ‘ μ«μ 1μ΅κ°λ₯Ό λ§λ€μ΄λ΄ κ³μ°νλ νλ‘κ·Έλ¨μ μμ±ν΄μΌ νλ€.' λΌκ³ κ°μ ν΄λ³΄μ. μ λλ μ΄ν°κ° μλ€λ©΄ λ©λͺ¨λ¦¬ μ΄λκ°μ λ§λ€μ΄λΈ μ«μ 1μ΅ κ°λ₯Ό 보κ΄νκ³ μμ΄μΌ νλ€. νλ μ λλ μ΄ν°λ₯Ό μ΄μ©νλ€λ©΄ λ¨μν μ λλ μ΄ν°λ§ μμ±ν΄λκ³ νμν λ μΈμ λ μ«μλ₯Ό λ§λ€μ΄λΌ μ μλ€. νΉνλ 1μ΅ κ° μ€ 100κ° μ λλ§ μ°μΈλ€λ©΄ μ°¨μ΄λ λμ± ν΄ κ²μ΄λ€.
- λ©λͺ¨λ¦¬ ν¨μ¨μ±
리μ€νΈμ κ²½μ° λ°μ΄ν°λ₯Ό ν λ²μ λ©λͺ¨λ¦¬μ μ μ¬νκΈ° λλ¬Έμ, λ©λͺ¨λ¦¬ λΆμ‘±νμμ΄ μΌμ΄λ κ²½μ° νλ‘κ·Έλ¨μ΄ κ°μκΈ° μ£½μ μ μλ€. νλ μ λλ μ΄ν°λ κ°μΈ λ°μ΄ν°μ μ κ·Όν λ λ§λ€ λ©λͺ¨λ¦¬μ μ μ¬νκΈ° λλ¬Έμ, ν° λ°μ΄ν°λ₯Ό λ€λ£¨λ κ²½μ° λ³΄λ€ μμ μ μ΄κ³ ν¨μ¨μ μ΄λ€. - κ²μΌλ₯Έ μ°μ°
리μ€νΈμ κ²½μ° λ¦¬μ€νΈ μ»΄ν리νΈμ μ μνμ, λͺ¨λ κ°μ λ¨Όμ μννκΈ° λλ¬Έμ μνλλ μ°μ°μ΄ μ€λ 걸리거λ μ°μ°λ κ°μ μ κ·Όνλ μκ°μ΄ κ½€ κ±Έλ¦°λ€. νλ μ λλ μ΄ν°λ κ·Έ λ κ·Έ λ yieldλ₯Ό ν΅ν΄ κ°μ μ κ·ΌνκΈ° λλ¬Έμ μν μκ°μ΄ κΈ΄ μ°μ°μ νμν μκ°κΉμ§ λ¦μΆ μ μλ€λ μ μ΄ μ₯μ μ΄λ€.
λ°λΌμ μ΄λ¬ν νΉμ§λ€μ μ λ νμ¬ νμν κ³³μ μ¬μ©νλ€λ©΄ λ³΄λ€ μμ ν νλ‘κ·Έλλ°κ³Ό μ½λλ₯Ό λ§λ€ μ μμ κ²μ΄λ€. :)
'Language > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [λ¬Έλ²] μ¬κ· ν¨μμ μ ν (0) | 2022.03.02 |
|---|---|
| [λ¬Έλ²] 리μ€νΈ μμ λ°λλ‘ λμ΄νκΈ° (0) | 2022.03.01 |
| [λ¬Έλ²] Set, List, Dictionary (μμ± δΈ) (0) | 2022.02.21 |
| [λ¬Έλ²] Listμ μ΅λΉκ° μΆλ ₯νκΈ° (0) | 2022.02.21 |
| [λ¬Έλ²] μμμ μ리 μ ννκΈ° (0) | 2022.02.08 |