[Python] Iterator๊ณผ Generator

    ๋ฐ˜์‘ํ˜•

    ๐Ÿ’ก 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

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€