파이썬 중급 9일차

김영목·2021년 8월 27일
0

파이썬중급

목록 보기
15/18

# 1.제너레이터를 조금 더 파고들어보자. 

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))


# 2.다양한 형태의 제너레이터!!!

#case1

def generator_ex1():
    print('Start')
    yield 'A Point.'
    print('continue')
    yield 'B Point.'
    print('End')

temp = iter(generator_ex1())

제너레이터 내에 반복을 뜻하는 함수가 없기때문에 인스턴스단계에서 iter를 불어온다.

#case2 : 지능형 자료형은 사실 제너레이터이다!!

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) # 단 해당 결과영역에서 yield는 사용안됨.
    
#case3 : 중요함수
# filterfalse, accumulate, chain, product, product, groupby

itertools에 대한 doc : https://docs.python.org/ko/3.8/library/itertools.html

# Chapter06-02
# 병행성(Concurrency)
# 이터레이터, 제네레이터
# Iterator, Generator

# 파이썬 반복 가능한 타입
# for, collections, text file, List, Dict, Set, Tuple, unpacking, *args

# Generator Ex1
def generator_ex1():
    print('Start')
    yield 'A Point.'
    print('continue')
    yield 'B Point.'
    print('End')

temp = iter(generator_ex1())

# print(next(temp))
# print(next(temp))
# print(next(temp))

for v in generator_ex1():
    pass
    # print(v)

print()

# Generator Ex2
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()


# Generator Ex3(중요 함수)
# filterfalse, accumulate, chain, product, product, groupby
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()

# 연결1
gen5 = itertools.chain('ABCDE', range(1,11,2))

print(list(gen5))

# 연결2

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')

# print(list(gen9))

for chr, group in gen9:
    print(chr, ' : ', list(group))

print()

profile
안녕하세요 김영목입니다.

0개의 댓글