- 파이썬 반복형 종류
- Iter, next 함수
- Generator 장점
- Generator 코딩 실습
- Generator 내장 함수 실습
- 반복 가능한 이유 ? ⇒ iter(x) 함수 호출
- Generator 패턴
- 지능형 리스트, 딕셔너리, 집합 → 데이터 셋이 증가 될 경우 메모리 사용량 증가 → 제너레이터 완화
- 단위 실행 가능한 코루틴(Coroutine) 구현에 아주 중요
- 딕셔너리, 리스트 한 번 호출 할 때 마다 하나의 값만 리턴 → 아주 작은 메모리 양을 필요로 함
- Generator 예제 1
def generator_ex1():
print('start')
yield 'AAA'
print('continue')
yield 'BBB'
print('end')
temp = iter(generator_ex1())
print('EX4-1 -', next(temp))
# start
# EX4-1 - AAA
print('EX4-2 -', next(temp))
# continue
# EX4-1 - BBB
print('EX4-3 -', next(temp))
# end
# 예외 StopIteration
# Generator 예제2
temp2 = [x * 3 for x in generator_ex1()]
temp3 = (x * 3 for x in generator_ex1())
print('EX5-1 -', temp2)
# ['AAAAAAAAA', 'BBBBBBBBB']
print('EX5-2 -', temp3)
# <generator object ~ >
for i in temp2:
print('EX5-3 -', i)
# AAAAAAAAA
# BBBBBBBBB
for i in temp3:
print('EX5-4 -', I)
#start
#AAAAAAAAA
# Generator 예제3 (자주 사용하는 함수)
import itertools
gen1 = itertools.count(1, 2.5)
print('EX6-1 -', next(gen1))
# 1
print('EX6-2 -', next(gen1))
# 3.5
print('EX6-3 -', next(gen1))
# 6
print('EX6-4 -', next(gen1))
# 8.5
# 조건
gen2 = itertools.takewhile(lambda n : n < 1000, itertools.count(1, 2.5))
for v in gen2:
print('ex6-5 -', v)
# 1 ~ 998.5 까지 print 찍힘
# 필터 반대
gen3 = itertools.filterfalse(lambda n : n < 3, [1,2,3,4,5])_
for v in gen3:
print('EX6-6 -', v)
# 3
# 4
# 5
# 누적 합계
gen4 = itertools.accumulate([x for x in range(1, 101)])
for v in gen4:
print('EX6-7 -', V)
# 1
# 3 => (누적합 : 1+2)
# 6 => (누적합 : 1+2+3)
# 연결 1
gen5 = itertools.chain('ABCDE', range(1, 11, 2))
print(list(gen5))
#['A', 'B', 'C', 'D', 'E', 1, 3, 5, 7, 9]
# 연결 2
gen6 = itertools.chain(enumerate('ABCDE')
print(list(gen6))
#[(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E')]
# 연산
gen8 = itertools.product('ABCDE', repeat=2)
print(list(gen8)) # 곱연산, 모든경우의 수를 제공함.
# 그룹화
gen9 = itertools.groupby('AAABBBCCDDEEEE')
for chr, group in gen9:
print(chrk, ':', list(group))
# ['A', 'A', 'A']
# ['B', 'B', 'B']
# ['C', 'C']
# ~~~~~
코루틴
- yield : 메인루틴 ↔ 서브루틴
- 코루틴 제어, 코루틴 상태, 양방향 값 전송
- yield from
- 서브루틴 : 메인루틴에서 → 리턴에 의해 호출 부분으로 돌아와 다시 프로세스
- 코루틴 : 루틴 실행 중 멈춤 가능 → 특정 위치로 돌아갔다가 → 다시 원래 위치로 돌아와 수행 가능
- GEN_CREATED : 처음 대기 상태
- GEN_RUNNING : 실행 상태
- GEN_SUSPENDED : yield 대기 상태
- GEN_CLOSED : 실행 완료 상태
'Engineering WIKI > Python' 카테고리의 다른 글
일급함수 (1) | 2022.05.30 |
---|---|
파이썬 2진수, 8진수, 10진수, 16진수 변환 (0) | 2022.05.26 |
추상클래스(abstract class) (1) | 2022.05.25 |
파이썬 람다식 (0) | 2022.05.25 |
파이썬 퀵 정렬 (0) | 2022.05.25 |
Python3 vs Pypy3 (0) | 2022.05.25 |
Python TDD (0) | 2022.05.23 |
파이썬 상속 (Inheritance) (0) | 2022.05.23 |