๋ฐ๋ณต์(iterator)๋ฅผ ์์ํด ๋ง๋ ๊ธฐ๋ฅ์ด ์ ๋๋ ์ดํฐ ํด๋์ค์ด๋ค.
์ ๋๋ ์ดํฐ๋ ํํ์๊ณผ ์ ์๋ฌธ์ ์ ๊ณตํ๋ค.
์ ์๋ฌธ์ ๊ฒฝ์ฐ, ํจ์์ฒ๋ผ def๋ฅผ ์ฌ์ฉํ์ง๋ง,
๋ฐํ๊ฐ์ return ๋์ yield ๋ก ํํํ๋ค.
ํจ์๋ ํ๋ฒ ์ค์ํ๋ฉด ๋ด๋ถ์ ์ฒ๋ฆฌ๋ ๋ด์ฉ์ ์ ๋ถ ์ญ์ ํ๋ค.
์ ๋๋ ์ดํฐ ๊ฐ์ฒด๋ ํน์ ๊ฐ์ ๋ฐํํด๋ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๋ ๊ฒ์ด ์๋๋ผ ๋ค์ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋๊ธฐํ๋ค.
์ ๋๋ ์ดํฐ ํํ์์ ๊ดํธ ์์ ์ปดํ๋ฆฌํจ์
ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.
g = (x for x in range(3))
print(g)
#result : <generator object <genexpr> at 0x7fdfefd7f4a0>
print(next(g)) #result : 0
print(next(g)) #result : 1
print(next(g)) #result : 2
* ์์๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์ค๋ค๊ฐ ๋ ์ด์ ๋ฐํํ ์์๊ฐ ์์ผ๋ฉด
stopIteration ์์ธ๊ฐ ๋ฐ์ ํ๋ค.
print(next(g,'์ข ๋ฃ')) #result : 2, '์ข ๋ฃ'
๐ผ๐ป์์ธ๊ฐ ๋ฐ์ํ์ง๋ง, ๋์ ํ ๋ฉ์์ง๋ฅผ ๋ฃ์ผ๋ฉด ์์ธ๋ฌธ๊ตฌ(์ข ๋ฃ)๊ฐ ๋ฌ๋ค.๐ผ๐ป
g_ = (x for x in range(3))
-------์ ๋๋ ์ดํฐ ๊ฐ์ฒด์ ์์๋ฅผ ๋ฐ๋ก ์ถ์ถํ๋ ค๋ฉด ?!-------
[*g_] ๋ฆฌ์คํธ ์์ ๋ณ ๋ถ์ด๊ธฐ !
์ ๋๋ ์ดํฐ๋ฅผ ์ ์ํ ๋๋ ํจ์ ๋ฌธ์ฅ๊ณผ yield ์ฌ์ฉํ๋ค.
def gen_():
print('์ฒ๋ฆฌ๋ฐฉ์1')
yield 1
print('์ฒ๋ฆฌ๋ฐฉ์2')
g2 = gen_() #์ ๋๋ ์ดํฐ ๊ฐ์ฒด ์์ฑ
print(next(g2)) #result: ์ฒ๋ฆฌ๋ฐฉ์1
1
์ ๋๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์ฒซ๋ฒ์งธ print๋ฌธ์ ์ถ๋ ฅํ๊ณ ๊ฐ์ ๋ฐํ
def gen_():
print('์ฒ๋ฆฌ๋ฐฉ์1')
yield 1
print('์ฒ๋ฆฌ๋ฐฉ์2')
g2 = gen_() #์ ๋๋ ์ดํฐ ๊ฐ์ฒด ์์ฑ
print(next(g2)) #result : ์ฒ๋ฆฌ๋ฐฉ์1
1
print(next(g2,'์ข
๋ฃ')) #result : ์ฒ๋ฆฌ๋ฐฉ์2
> yield ๋ฌธ์ ๋ง๋์ง ๋ชปํด ์ข
๋ฃ ์ฒ๋ฆฌ ์ข
๋ฃ
๋ ๋ฒ next ํจ์๋ฅผ ํธ์ถํด์ ์ ๋๋ ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด yield ๋ ํ๋ฒ๋ง ์๋๋๊ณ , ๋๋ ์ฒ๋ฆฌํ yield ๊ฐ ์์ด ์ฌ์ฉ์ด ์ข
๋ฃ๋๋ค.
๐คทโโ๏ธ๐คท๐ผโโ๏ธ๐คท๐ป ๊ทธ๋์ ์ ๋๋ ์ดํฐ๋ฅผ ์ ์ฐ์ง,,,?
์ ๋๋ ์ดํฐ๋ Lazy Evaluation ๊ตฌํ์ฒด์ด๋ค.
lazy evaluation ์ด๋?
์ด๋ค ๊ฐ์ด ์ค์ ๋ก ์ฐ์ผ ๋ ๊น์ง ๊ทธ ๊ฐ์ ๊ณ์ฐ์ ๋ค๋ก ๋ฏธ๋ฃจ๋ ๋์ ๋ฐฉ์
์ฆ, ํ์ํ ๋ ๊ฐ์ ๊ณ์ฐํด์ฃผ๋ ๊ฐ์ฒด๋ค๊ทธ๋์ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๋ค
๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ๊ณผ์ ์ฐจ์ด์ ์
๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ :
์ํ๋ฌธ์ ์๋ ๊ฐ์ฒด๊ฐ ํ๋ฒ์ ์ถ๋ ฅ๋๋ค.
๋๊ดํธ๋ก ๋ฌถ๋๋ค []
์ ๋๋ ์ดํฐ:
์ปดํ๋ฆฌํจ์ ์ () ์๊ดํธ๋ก ๋ฌถ๋๋ค
L = [ 1,2,6,9]
import time
def print_iter(iter):
for element in iter:
print(element)
def lazy_return(num):
print("sleep 1s")
time.sleep(1)
return num
print("comprehension_list=")
comprehension_list = [ lazy_return(i) for i in L ]
print_iter(comprehension_list)
print("generator_exp=")
generator_exp = ( lazy_return(i) for i in L )
print_iter(generator_exp)
(์ถ์ฒ : ์์ฝ๋)
์ปดํ๋ฆฌํจ์ ๊ณผ ์ ๋๋ ์ดํฐ ๋๊ฐ์ง ๊ฒฝ์ฐ ๊ฐ๊ฐ ์คํํด๋ณด๋ฉด
์ปดํ๋ฆฌํจ์ ์ ๊ฒฝ์ฐ,comprehension_list= sleep 1s sleep 1s sleep 1s sleep 1s 1 2 6 9
์ ๋๋ ์ดํฐ์ ๊ฒฝ์ฐ,
generator_exp= sleep 1s 1 sleep 1s 2 sleep 1s 6 sleep 1s 9
๐คทโโ๏ธ ๊ถ๊ธ์ฆ : ํจ์์ ์ ๋๋ ์ดํฐ ์์ฑ ์, ๋ฆฌํด ๋์ yield ๋ฅผ ์จ์ผํ๋ค๊ณ ํ๋๋ฐ, ๊ทธ๋ฅ return ์ผ๋ก ๊ฐ์ ๋ฐ์๋ ์๊ด์๋๊ฑธ๊น?,, > ๋์ ๋ฐ๋ผ ๋ค๋ฆ