๐ก Iterator
'iteration'์ '๋ํ์ด, ์ํ'์ด๋ผ๋ ๋ป์ ๋จ์ด์ด๋ค. Python์์๋ Iterator๋ '์ํํ ์ ์๋ ๊ฒ'์ ๋งํ๋๋ฐ, ์๋ฅผ๋ค๋ฉด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ฉด for๋ฌธ์ ์ด์ฉํด์ ๋ฆฌ์คํธ์ ์์๋ฅผ ํ๋ํ๋ ๊บผ๋ด ์ฝ์ด์ฌ ์ ์๋ค.
์ฆ, ์ํํ๋ฉฐ item์ ํ๋์ฉ ๊บผ๋ด์ด ์ฝ์ ์ ์๋ ๊ฒ์ Iterator๋ผ๊ณ ํ๋ค.
>>> mylist = [1, 2, 3]
>>> for i in mylist:
... print(i)
1
2
3
์ฌ๊ธฐ์ mylist๋ iterator์ด๊ณ , ์ํํ ์ ์๋ iterable์ด๋ค.
for [item] in [iterator]:
์ด๋ ๊ฒ for๋ฌธ์ผ๋ก item์ ํ๋ํ๋ ๊บผ๋ด์ฌ ์ ์๋ ๋ชจ๋ ๊ฒ์ iterator์ด๋ค. (์ํํ๋ฉฐ ํ๋ํ๋ ๊บผ๋ด์ค๊ธฐ!)
๐ก Generator
Generator๋ Iterator์ด๋ค! ๋จ, generator๋ ํ๋ฒ๋ง! ์ฌ์ฉํ ์ ์๋ iterator์ด๋ค. Generator๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ ์ฅํ์ง ์๊ณ , ๊ทธ๋๊ทธ๋ ๊ฐ์ ์์ฑํด์ ์ฌ์ฉํ ๋ฟ์ด๋ค. (geterators generate the values on the fly)
Generators are iterators, a kind of iterable you can only iterate over once. Generators do not store all the values in memory, they generate the values on the fly:
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
... print(i)
0
1
4
iterator์์์ ์์์ ๋ค๋ฅธ์ ์ [ ]๋์ ( )๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ธ๋ฐ, ์ด๋๋ฌธ์ mygenerator๋ ํ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ iterator (=generator)์ด๋ค.
๋ฐ๋ผ์ ํ๋ฒ ์ฐ๊ณ ๋ง iterator๋ผ๋ฉด, generator๋ฅผ ์ฌ์ฉํด์ฃผ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ด๋ค!(memory efficient)
๐ก yield
'yield' ํค์๋๋ 'return' ํค์๋์ ๊ฐ์ ์ญํ ์ ํ์ง๋ง, yield๋ generator๋ฅผ ๋ฐํํด์ค๋ค.
์ฐธ๊ณ !! ๊ณต๋ถ,,
https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do/231855#231855
What does the "yield" keyword do?
What is the use of the yield keyword in Python? What does it do? For example, I'm trying to understand this code1: def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftch...
stackoverflow.com
๋๊ธ