- 파이썬 반복형 종류
- Iter, next 함수
- Generator 장점
- Generator 코딩 실습
- Generator 내장 함수 실습
- 반복 가능한 이유 ? ⇒ iter(x) 함수 호출
- Generator 패턴
- 지능형 리스트, 딕셔너리, 집합 → 데이터 셋이 증가 될 경우 메모리 사용량 증가 → 제너레이터 완화
- 단위 실행 가능한 코루틴(Coroutine) 구현에 아주 중요
- 딕셔너리, 리스트 한 번 호출 할 때 마다 하나의 값만 리턴 → 아주 작은 메모리 양을 필요로 함
def generator_ex1():
print('start')
yield 'AAA'
print('continue')
yield 'BBB'
print('end')
temp = iter(generator_ex1())
print('EX4-1 -', next(temp))
print('EX4-2 -', next(temp))
print('EX4-3 -', next(temp))
temp2 = [x * 3 for x in generator_ex1()]
temp3 = (x * 3 for x in generator_ex1())
print('EX5-1 -', temp2)
print('EX5-2 -', temp3)
for i in temp2:
print('EX5-3 -', i)
for i in temp3:
print('EX5-4 -', I)
import itertools
gen1 = itertools.count(1, 2.5)
print('EX6-1 -', next(gen1))
print('EX6-2 -', next(gen1))
print('EX6-3 -', next(gen1))
print('EX6-4 -', next(gen1))
gen2 = itertools.takewhile(lambda n : n < 1000, itertools.count(1, 2.5))
for v in gen2:
print('ex6-5 -', v)
gen3 = itertools.filterfalse(lambda n : n < 3, [1,2,3,4,5])_
for v in gen3:
print('EX6-6 -', v)
gen4 = itertools.accumulate([x for x in range(1, 101)])
for v in gen4:
print('EX6-7 -', V)
gen5 = itertools.chain('ABCDE', range(1, 11, 2))
print(list(gen5))
gen6 = itertools.chain(enumerate('ABCDE')
print(list(gen6))
gen8 = itertools.product('ABCDE', repeat=2)
print(list(gen8))
gen9 = itertools.groupby('AAABBBCCDDEEEE')
for chr, group in gen9:
print(chrk, ':', list(group))
코루틴
- yield : 메인루틴 ↔ 서브루틴
- 코루틴 제어, 코루틴 상태, 양방향 값 전송
- yield from
- 서브루틴 : 메인루틴에서 → 리턴에 의해 호출 부분으로 돌아와 다시 프로세스
- 코루틴 : 루틴 실행 중 멈춤 가능 → 특정 위치로 돌아갔다가 → 다시 원래 위치로 돌아와 수행 가능
- GEN_CREATED : 처음 대기 상태
- GEN_RUNNING : 실행 상태
- GEN_SUSPENDED : yield 대기 상태
- GEN_CLOSED : 실행 완료 상태