python3 제18장 - 교체기와 생성기

7905 단어
1. 교체기(Iterator)
  • 교체는 집합 요소에 접근하는 방식
  • 교체기는 누적된 위치를 기억할 수 있는 대상이다.
  • 교체기 대상은 집합의 첫 번째 요소부터 모든 요소가 접근되고 끝날 때까지 접근한다.교체기는 앞으로 갈 수 있을 뿐 후퇴하지 않는다.
  • 교체기는 두 가지 기본적인 방법이 있는데 그것이 바로iter()와next()이다.

  •  
    문자열, 목록 또는 모듈 객체를 사용하여 교체기를 작성할 수 있습니다.
    인스턴스 1:
    basket = ['apple', 'orange', 'pear', 'banana']
    
    it = iter(basket)  #  
    
    #  
    print(next(it))
    
    #  
    print(next(it))

    위 코드, 출력:
    apple
    orange

     
    인스턴스 2:
    basket = 'abc'
    it = iter(basket)  #  
    
    print(next(it))  #  
    
    print(next(it))  #  

    위 코드, 출력:
    a
    b

     
    일반적으로 for 명령문과 함께 사용됩니다. 예:
    basket = 'abc'
    it = iter(basket)  #  
    for n in it:
        print(n)

    위 코드, 출력:
    a
    b
    c

     
    Python에서list,truple,str,dict 이것들은 모두 교체될 수 있지만, 그들은 교체기가 아니다.왜?
    교체기와 비교하면 매우 큰 차이가 있기 때문에list/truple/map/dict의 데이터 크기는 확정적이다. 즉, 얼마나 많은지 알 수 있다.그러나 교체기는 아니다. 교체기는 몇 번을 실행해야 할지 모르기 때문에 몇 개의 요소가 있는지 모르고next()를 호출할 때마다 한 걸음 아래로 내려가는 타성으로 이해할 수 있다.
     
    교체가 가능한지 아닌지를 판단하기 위해 Iterable로
    from collections import Iterable
    
    print('{}  Iterable?', isinstance({}, Iterable))
    print('()  Iterable?', isinstance((), Iterable))
    print('100  Iterable?', isinstance(100, Iterable))

    위 코드, 출력:
    {}  Iterable? True
    ()  Iterable? True
    100  Iterable? False

     
    교체기인지 아닌지를 판단하는 Iterator
    from collections import Iterator
    
    print('{}  Iterable?', isinstance({}, Iterator))
    print('()  Iterable?', isinstance((), Iterator))
    print('(x for x in range(10))  Iterable?', isinstance((x for x in range(10)), Iterator))

    위 코드, 출력:
    {}  Iterable? False
    ()  Iterable? False
    (x for x in range(10))  Iterable? True

    순환할 수 있는 모든 것은 Iterable이다
    next () 가 가능한 모든 것은 Iterator
    집합 데이터 형식인list,truple,dict,str는 모두 Itrable입니다. Iterator가 아니지만 iter () 함수를 통해 Iterator 대상을 얻을 수 있습니다
    Python의 for 순환은next를 통해 이루어진다
    for x in [1, 2, 3, 4, 5]:  
        pass

    ... 과 같다
    #  iterator   
    it = iter([1, 2, 3, 4, 5])  
    while True:  
        try:  
            #    
            x = next(it)
            
        except StopIteration:  
            #  StopIteration   
            break 

     
     
    2. 생성기
    파이톤에서 yield를 사용한 함수를 생성기(generator)라고 부른다.
  • 일반 함수와 달리 생성기는 리셋 교체기의 함수로 교체 작업에만 사용할 수 있고 생성기가 하나의 교체기라는 것을 간단하게 이해할 수 있다.
  • 호출 생성기가 실행되는 과정에서 yield를 만날 때마다 함수는 현재의 모든 실행 정보를 정지하고 저장하며 yield의 값을 되돌려줍니다.다음next () 방법을 실행할 때 현재 위치에서 계속 실행합니다.
  • def fibonacci(n):  #   -  
        a, b, counter = 0, 1, 0
        while True:
            if counter > n:
                return
            yield a
            a, b = b, a + b
            counter += 1
    
    f = fibonacci(10)  # f  , 

    어떤 상황에서 ield를 사용해야 합니까?하나의 함수 f, f는list를 되돌려줍니다. 이list는 동적 계산으로 계산됩니다. (수학적 계산이든 논리적 읽기 포맷이든) 그리고 이list는 매우 큽니다. (고정이 크든 입력 매개 변수가 커지든) 이럴 때우리는 이 함수를 호출하고 교체기를 사용하여 순환할 때마다 각각list 요소를 하나씩 얻기를 원한다. 완전한list를 직접 얻지 않고 메모리를 절약할 때 yield가 매우 유용하다.

    좋은 웹페이지 즐겨찾기