def my_gen2(word):
print(f'you input {word}')
yield word
w = my_gen2('hi')
print(w)
조금 더 활용가능한 제너레이터 만들기.
def gen_more(word) :
print(f'i am {word}')
x = yield word
print(f'you give {x})
y = yield x
여기서 주의할 점!
반복문 처럼 돌려서 나오도록 해야되기때문에
w = iter(gen_more('young'))
print(next(w))
w = iter(w.send('fuck'))
print(next(w))
이러한 방식으로 구성해야하며 만약 이렇게 iter메쏘드를 인스턴스에 쓰고 싶지 않다면 다음과 같이 하면된다.
참고 :
list = []
def my_my_my(a) :
a = a.split(',')
list.append(a)
for i in list :
yield i
w = my_my_my('kimchi, rice, egg, onion, sozu')
print(next(w))
def generator_ex1():
print('Start')
yield 'A Point.'
print('continue')
yield 'B Point.'
print('End')
temp = iter(generator_ex1())
제너레이터 내에 반복을 뜻하는 함수가 없기때문에 인스턴스단계에서 iter를 불어온다.
list = [1,2,3,4,5,6,7,8,9,10]
my_realize = ( i for i in list if i % 2 == 1)
print(type(my_realize)) =gen
위 제너레이터를 작동시키고 싶다면 반복문을 활용하면 된다.
for i in my_realize :
print(i)
itertools에 대한 doc : https://docs.python.org/ko/3.8/library/itertools.html
def generator_ex1():
print('Start')
yield 'A Point.'
print('continue')
yield 'B Point.'
print('End')
temp = iter(generator_ex1())
for v in generator_ex1():
pass
print()
temp2 = [x * 3 for x in generator_ex1()]
temp3 = (x * 3 for x in generator_ex1())
print(temp2)
print(temp3)
for i in temp2:
print(i)
print()
print()
for i in temp3:
print(i)
print()
print()
import itertools
gen1 = itertools.count(1, 2.5)
print(next(gen1))
print(next(gen1))
print(next(gen1))
print(next(gen1))
print()
gen2 = itertools.takewhile(lambda n : n < 1000, itertools.count(1, 2.5))
for v in gen2:
print(v)
print()
gen3 = itertools.filterfalse(lambda n : n < 3, [1,2,3,4,5])
for v in gen3:
print(v)
print()
gen4 = itertools.accumulate([x for x in range(1, 101)])
for v in gen4:
print(v)
print()
gen5 = itertools.chain('ABCDE', range(1,11,2))
print(list(gen5))
gen6 = itertools.chain(enumerate('ABCDE'))
print(list(gen6))
gen7 = itertools.product('ABCDE')
print(list(gen7))
gen8 = itertools.product('ABCDE', repeat=2)
print(list(gen8))
gen9 = itertools.groupby('AAABBCCCCDDEEE')
for chr, group in gen9:
print(chr, ' : ', list(group))
print()