제너레이터 함수 - 함수와 같이 작성
yield 식을 사용한 함수
반환값은 제너레이터 이터레이터
특수메서드 next()호출 시 마다 함수 안의 처리가 다음 yield식 까지 수행됨
함수를 벗어나면 StopIteration 예외 발생
반환값이 이터레이션이므로 for문, 컴프리헨션 인수에 사용가능
제너레이터 식 - 컴프리헨션을 이용해 작성
yield from 식 - 서브 제너레이터로 처리를 이첩
functools.lru_cashe() - 함수의 결과를 캐시하는 함수 데커레이터
dataclasses.dataclass() - 자주하는 처리를 자동으로 추가하는 클래스 데커레이터
콘텍스트 관리자 구현
__enter__(), __exit__() - with문 앞뒤에서 호출하는 메서드
with문과 예외처리
as키워드 - __enter__()의 반환값을 이용
contextlib.contextmanager로 간단하게 구현