Generators in Python
References: Python Wiki, WikiDocs, [μ± ] νμ΄μ¬ μ½λ©μ κΈ°μ
What is Generator in Python?
1. Generator λ?
Iteratorλ₯Ό μ§μ λ§λ€ λ μ¬μ©νλ ꡬ문
ν¨μ λ΄λΆμ
yield
keywordκ° ν¬ν¨λλ©΄ ν΄λΉ ν¨μλ Generatorκ° λλ€
μ λλ μ΄ν° ν¨μ
κ° νΈμΆλ λ λ°νλλ iteratorμ μΌμ’μ λ€λ μ΄ν° ν¨μλ μΌλ°μ μΈ ν¨μμ λΉμ·νκ² μκ²Όμ§λ§
yield ꡬ문
μ μ¬μ©ν΄λ°μ΄ν°λ₯Ό μνλ μμ μ λ°ννκ³ μ²λ¦¬λ₯Ό λ€μ μμ
ν μ μλ€μΌλ°μ μΈ ν¨μλ μ§μ μ μ΄ νλλΌλ©΄ μ λ€λ μ΄ν°λ μ§μ μ μ΄ μ¬λ¬κ°λΌκ³ μκ°ν μ μλ€
μ λ€λ μ΄ν°λ₯Ό μ¬μ©νλ©΄ μνλ μμ μ μνλ λ°μ΄ν°λ₯Ό λ°μ μ μκ²λλ€.
Iteratorλ class μ
__iter__
,__next__
λλ__getitem__
methodλ₯Ό ꡬνν΄μΌ νμ§λ§,Generatorλ ν¨μ μμμ
yield
keyword λ§ μ¬μ©νλ©΄ λμ
Generatorλ Iteratorλ³΄λ€ ν¨μ¬ κ°λ¨νκ² μμ±ν μ μμ
Generatorλ₯Ό λ°μμ λΌκ³ λΆλ₯΄κΈ°λ ν¨
Generator ν¨μλ₯Ό νΈμΆνλ©΄ Generator κ°μ²΄λ₯Ό return νλ€
ex)
def generator_example(): print('Print 1') print('Print 2') yield g = generator_example() print(g) next(g)
Result
image-20200726165007727 ν¨μ μμμ
yield
λ₯Ό μ¬μ©νλ©΄ ν¨μλ Generatorκ° λλ©°,yield
μλ κ°(λ³μ)λ₯Ό μ§μ νλ€ex)
def number_generator(): yield 0 yield 1 yield 2 for number in number_generator(): print(number)
Result
image-20200726162511720
ν¨μμ
yield
λ§ μ¬μ©ν΄μ κ°λ¨νκ² iteratorλ₯Ό ꡬνν μ μμIteratorλ
__next__
methodμμμ μ§μ returnμΌλ‘ κ°μ λ°ννμ§λ§,Generatorλ
yield
μ μ§μ ν κ°μ΄__next__
methodμ λ°νκ°μΌλ‘ λμ΄
Iteratorλ raiseλ‘ StopIteration μμΈλ₯Ό μ§μ λ°μμμΌ°μ§λ§,
Generatorλ ν¨μμ λκΉμ§ λλ¬νλ©΄ StopIteration μμΈκ° μλμΌλ‘ λ°μν¨
Generatorλ generator κ°μ²΄μμ λ΄μ₯ν¨μ
__next__
method λ₯Ό νΈμΆν λλ§λ€ ν¨μ μμyield
μ½λλ₯Ό μ€ννλ©°, yieldμμ κ°μ λ°μμν΄κ·Έλμ μ΄λ¦μ΄ Generator!!
generatorμμ
yield
μ μ λ¬ν κ°μ iteratorκ° νΈμΆνλ μͺ½μ λ°ννλ€Generatorμμ λ°νν iteratorλ gerator ν¨μμ μμ μλ
yield
ννμμ μ λ¬λ κ°λ€μ μ§ν©μ΄λ€
Generatorλ ν¨μλ₯Ό λλ΄μ§ μμ μνμμ
yield
λ₯Ό μ΄μ©ν΄μ κ°μ λ°μΌλ‘ μ λ¬ ν μ μλ€returnμ λ°ν μ¦μ ν¨μκ° λλμ§λ§,
yieldλ μ μ ν¨μ λ°μ μ½λκ° μ€νλ μ μλλ‘ μ보λ₯Ό ν΄μ κ°μ κ°μ Έκ° μ μκ² ν λ€, λ€μ Generator μμ μλ μ½λλ₯Ό μ€ννλ λ°©μ
2. Generator λμ
yield λ¬Έμ΄ ν¬ν¨λ μ λ€λ μ΄ν° ν¨μλ₯Ό μ€ννλ©΄ μ λ€λ μ΄ν° κ°μ²΄κ° λ°νλλλ° μ΄ λλ ν¨μμ λ΄μ©μ΄ μ€νλμ§ μλλ€.
next()
λΌλ λΉνΈμΈ λ©μλλ₯Ό ν΅ν΄ μ λ€λ μ΄ν°λ₯Ό μ€νμν¬ μ μμΌλ©°next()
λ©μλ λ΄λΆμ μΌλ‘ iterator λ₯Ό μΈμλ‘ λ°μ μ΄ν°λ μ΄ν°μ__next__()
λ©μλλ₯Ό μ€νμν¨λ€.μ²μ
__next__()
λ©μλλ₯Ό νΈμΆνλ©΄ ν¨μμ λ΄μ©μ μ€ννλ€ yield λ¬Έμ λ§λ¬μ λ μ²λ¦¬λ₯Ό μ€λ¨νλ€.μ΄ λ λͺ¨λ local state λ μ μ§λλλ° λ³μμ μν, λͺ λ Ήμ΄ ν¬μΈν°, λ΄λΆ μ€ν, μμΈ μ²λ¦¬ μνλ₯Ό ν¬ν¨νλ€.
κ·Έ ν μ μ΄κΆμ μμ 컨ν μ€νΈλ‘ μ보(yield)νκ³ λ
__next__()
κ° νΈμΆλλ©΄ μ λ€λ μ΄ν°λ μ€λ¨λ μμ λΆν° λ€μ μμνλ€.
3. Generatorμ μ₯μ
Generatorλ₯Ό μ¬μ©νλ λ°©λ²μ΄ λμ λ κ²°κ³Όμ listλ₯Ό λ°ννλ λ°©λ²λ³΄λ€ μ΄ν΄νκΈ°μ λͺ ννλ€
Generatorλ λͺ¨λ μ λ ₯κ³Ό μΆλ ₯μ memoryμ μ μ₯νμ§ μμΌλ―λ‘, μ λ ₯κ°μ μμ μκΈ° μ΄λ €μΈ λλ μ°μλ μΆλ ₯μ λ§λ€ μ μλ€
μ λ€λ μ΄ν°λ₯Ό μ¬μ©νλ©΄ yield λ₯Ό ν΅ν΄ κ·Έλκ·Έλ νμν κ°λ§μ λ°μ μ°κΈ°λλ¬Έμ λͺ¨λ κ°μ λ©λͺ¨λ¦¬μ λ€κ³ μμ νμκ° μκ²λλ€
4. Generatorμ λ¨μ
λ€λ§ μ λ€λ μ΄ν°λ κ·Έλκ·Έλ νμν κ°μ λμ Έμ£Όκ³ κΈ°μ΅νμ§λ μκΈ° λλ¬Έμ
a 리μ€νΈ
κ° μ¬λ¬λ² μ¬μ©λ μ μλ λ°λ©΄b μ λ€λ μ΄ν°
λ νλ² μ¬μ©λ ν μμ§λλ€μ΄λ λͺ¨λ μ΄ν°λ μ΄ν°κ° λ§μ°¬κ°μ§μΈλ° List, Set μ μ΄ν°λ¬λΈνμ§λ§ μ΄ν°λ μ΄ν°λ μλκΈ°μ μμ§λμ§ μλλ€
Last updated
Was this helpful?