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)
Result
image-20200726165007727 ํจ์ ์์์
yield
๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์๋ Generator๊ฐ ๋๋ฉฐ,yield
์๋ ๊ฐ(๋ณ์)๋ฅผ ์ง์ ํ๋คex)
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?