https://dojang.io/mod/page/view.php?id=2412
파이썬 코딩 도장: 40.1 제너레이터와 yield 알아보기
Unit 40. 제너레이터 사용하기 제너레이터는 이터레이터를 생성해주는 함수입니다. 이터레이터는 클래스에 __iter__, __next__ 또는 __getitem__ 메서드를 구현해야 하지만 제너레이터는 함수 안에서 yield
dojang.io
제너레이터는 이터레이터를 생성해주는 함수 이다.
함수 안에서 yield를 사용하면 함수는 제너레이터가 되며 yield에는 값(변수)을 지정합니다.
제네레이터는 다양한 방법으로 만들 수 있고,(iterable한것만)
그 중 import itertools 이라는 패키지를 이용하면 더 다양한 기능을 사용해 만들 수 있다.
중요시 볼건
1. 만드는 기본형식
2. 다양한 스킬들
3. yield 에 대한 개념
1. 만드는 기본형식
제네레이터용 함수
객체생성
안에 내용물 꺼내는 방식 2개
2.
import itertools
3. yield 에 대한 개념
return이라고 생각하면 좋다. 한번씩 불릴때마다 하나씩 return한다고 생각하면됨.
return할 yield가 없으면 에러 호출
코드
# 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()
'C++,python (인프런+사이트) > python 파이썬 정리' 카테고리의 다른 글
코루틴 메인<--->서브 주고 받는법 (0) | 2022.04.04 |
---|---|
코루틴 메인--->서브 보내는법 (0) | 2022.04.04 |
데코레이터 (0) | 2022.04.03 |
Closure 클로저 (0) | 2022.04.03 |
Class로 구현하는 클로저 기능 (0) | 2022.04.03 |
댓글