[2017 - 09 - 20] 교체 기와 생 성기 (1)

2504 단어
교체 기 (iterator) 와 생 성기 (generator)
  • 교체 기  교체 기: 이것 은 띠 상태의 대상 입 니 다. next () 방법 을 호출 할 때 용기 의 다음 값 을 되 돌려 줍 니 다. iter 와 next () (python 2 에서 next () 를 실현 하 는 방법 을 실현 한 대상 은 모두 교체 기 입 니 다. iter 는 교체 기 자신 을 되 돌려 주 고 next 는 용기 의 다음 값 을 되 돌려 줍 니 다. 용기 에 더 많은 요소 가 없 으 면 StopIteration 이상 을 던 집 니 다.   용기: 여러 요 소 를 한데 묶 은 데이터 구조 입 니 다. 용기 에 있 는 요 소 는 하나씩 교체 해서 얻 을 수 있 습 니 다. in, not in 키워드 로 요소 가 용기 에 포함 되 어 있 는 지 판단 할 수 있 습 니 다.보통 이 데이터 구 조 는 모든 요 소 를 메모리 에 직접 저장 합 니 다.   교체 가능 대상 (iterable): 교체 기 를 되 돌 릴 수 있 는 대상 이 라면 모두 교체 가능 대상 이 라 고 할 수 있다.예 를 들 어 내 장 된 list, dict, set 등 데이터 구 조 는 교체 가능 한 대상 에 속한다.   교체 기 를 실현 하 는 방법
  • 용기 대상 에 iter () 와 next () 방법 을 추가 합 니 다 (Python 2.7 은 next () 입 니 다.iter () 는 교체 기 대상 자체 self 를 되 돌려 주 고 next () 는 next () 또는 교체 할 때마다 요 소 를 되 돌려 줍 니 다.
  • 내 장 된 함수 iter () 는 교체 가능 한 대상 을 교체 기
  • 로 전환 합 니 다.
  • 생 성기 (generator).특수 한 교체 기, 생 성 기 는 yield 문 구 를 통 해 일반 함 수 를 생 성기 로 바 꾸 는 것) 을 통 해 교체 기 를 빠르게 생 성하 고 복잡 한 iter () & next () 방식 을 생략 합 니 다.

  • #    
    >>> list1=[1,2,3,4]
    >>> list_iterator=iter(list1)
    >>> list1
    [1, 2, 3, 4]
    >>> list_iterator
    
    >>> next(list_iterator)
    1
    >>> next(list_iterator)
    2
    >>> next(list_iterator)
    3
    >>> next(list_iterator)
    4
    >>> next(list_iterator)
    Traceback (most recent call last):
      File "", line 1, in 
        next(list_iterator)
    StopIteration
    >>> 
    

    예제 2: 사용자 정의 교체 기: 피 보 나치 수열 을 수학 적 으로 실현 하고 피 보 나치 수열 은 다음 과 같이 재 귀적 인 방법 으로 정의 된다. F (0) = 0, F (1) = 1, F (n) = F (n - 1) + F (n - 2) (n > = 2, n * 8712 ° N *)
    >>> from itertools import islice
    >>> class Fibonacci:
        def __init__(self):
            self.f0=0
            self.f1=1
        def __iter__(self):
            return self
        def __next__(self):
            value=self.f1
            self.f1+=self.f0
            self.f0=value
            return value
    
        
    >>> f = Fibonacci()
    >>> list(islice(f, 0, 10))
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    >>> 
    

    예 3: 피 보 나치 수열 을 생 성기 방식 으로 실현 한다.
    >>> def Fibonacci():
        f0,f1=0,1
        while True:
            yield f1
            f0,f1=f1,f0+f1
    >>> f = Fibonacci()
    >>> list(islice(f, 0, 10))
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    >>> 
    

      교체 기 는 모든 요 소 를 메모리 에 미리 불 러 오지 않 습 니 다. 호출 될 때 만 값 을 되 돌려 줍 니 다.

    좋은 웹페이지 즐겨찾기