정리 노트‎ > ‎

Python

Python 공부

참고 자료

웹 사이트
 

Iterator와 Generator

참고한 글들

yrange 함수

built-in 함수에 있는 range 함수를 generator 생성 함수 형태로를 구현해보았다.
사용 방법은 range 함수와 동일한데, 아래 구현 내용에서 주의 깊게 보아야 할 부분은 세 가지이다.
  • default parameter의 문법 특징 상 일반 parameter 앞에 optional parameter를 둘 수 없기 때문에 약간의 꽁수를 사용해서 마치 optional인 것처럼 보이도록 구현한 것 (아래 구현 내용 중 start 인자)
  • 모든 범위의 요소를 한꺼번에 만들지 않고 yield를 사용해서 그때 그때 필요한 값만 반환하도록 구현한 것
    • Lazy Evaluation
    • 메모리를 절약하고 초기화 비용을 줄일 수 있지만, 같은 index에 대해 중복 참조가 많아질 경우 더 많은 시간이 걸리게 된다. 이것은 generator 내부적으로 현재 index의 값을 구하기 위해 처리해야 하는 연산이 복잡할수록 더욱 심해진다. 그러므로 자주 참조해야 하는 값은 매번 generator를 거치기보다 별도의 변수를 선언하여 그 값을 저장해두고 사용하는 편이 좋다.
  • 외부에서 generator 함수에 값을 전달하는 방법
    • yield 실행 후 그 반환 값을 구해서 유효성을 검사한 이후 적절할 경우 현재 값을 그 값으로 대체해줌 (아래 구현 내용 중 val 부분)
def yrange(start, stop=None, step=None):
    """yrange([start,] stop[, step]) -> generator function of integer list"""
    if not stop:
        begin, end, delta = 0, start, 1
    elif not step:
        begin, end, delta = start, stop, 1
    else:
        begin, end, delta = start, stop, step

    n = begin
    while n < end:
        val = (yield n)
        if val is not None:
            n = val
        else:
            n += delta
 

내가 만들어 본 것들

하위 페이지 (1): get_tts.py seminar
Comments