Python 생 성기 generator 원리 및 용법 해석

머리말
생 성기 생 성기
생 성기 의 본질은 교체 기(iterator)이다.
생 성 기 를 이해 하려 면 교체 가능 대상,교체 기 라 는 세 가지 개념 을 이해 해 야 한다.
Python 생 성기 generator 안내
iteration, iterable, iterator
교체(iteration):python 에서 교체 하 는 것 은 보통 for...in..을 통 해 이 루어 집 니 다.또한 교체 가능 한 대상 iterable 이 라면 모두 교체 할 수 있 습 니 다.
교체 가능 대상(iterable):Python 의 임의의 대상 입 니 다.교체 기 를 되 돌려 줄 수 있 는 만 정의 하면 됩 니 다.iter__방법,또는 아래 표 시 된 색인 을 지원 할 수 있 는 를 정의 하 였 습 니 다.getitem __방법,그러면 그것 은 교체 가능 한 대상 이다.쉽게 말 하면 교체 가능 한 대상 은 교체 기 를 제공 할 수 있 는 임의의 대상 이다.되 돌아 오 는 것 은 iterator 대상 이다.공식 설명
교체 기(iterator):쉽게 말 하면 교체 기 는 iterator 를 실현 한 것 입 니 다.iter__() iterator.next__() 의 대상,iterator.iter__()방법 은 iterator 대상 자 체 를 되 돌려 줍 니 다.공식 적 으로 말 하면 바로 이 방법 입 니 다.for...in..문 구 를 실 현 했 고 iterator.next__()iterator 는 iterable 과 구별 되 는 관건 입 니 다.하나의 요 소 를 명시 적 으로 가 져 올 수 있 도록 해 줍 니 다.next()방법 을 호출 할 때 실제로 두 가지 조작 이 생 겼 습 니 다.
iterator 상 태 를 업데이트 하고 다음 호출 을 위해 다음 항목 을 가리 키 도록 합 니 다.모든 값 이 지나 면 포인터 가 다음 위치 로 이동 합 니 다.iterator 를 옮 겨 다 니 면 빈 용기 가 됩 니 다.그러나 None 가 아 닙 니 다.교체 가 끝 난 후에 지침 은 자동 으로 1 위로 돌아 가지 않 고 마지막 위치 에 머 물 러 있 습 니 다.시작 하려 면 교체 대상 을 다시 불 러 와 야 합 니 다.
실례 이해:

 >>> from collections import Iterable, Iterator
 >>> a = [1,2,3]  #     ,list   iterable
 >>> b = iter(a)  #   iter()  ,  iterator,iter()      __iter__(),
 >>> isinstance(a, Iterable)
 True
 >>> isinstance(a, Iterator)
 False
 >>> isinstance(b, Iterable)
 True
 >>> isinstance(b, Iterator)
 True
이 를 통 해 알 수 있 듯 이 itertor 는 반드시 iterable 이지 만 iterable 이 반드시 itertor 는 아니다.

 >>> dir(a)
 ['__add__','__class__','__contains__','__delattr__','__delitem__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__gt__','__hash__','__iadd__','__imul__','__init__','__iter__','__le__','__len__','__lt__','__mul__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__', '__reversed__','__rmul__', '__setattr__','__setitem__','__sizeof__','__str__', '__subclasshook__','append','clear' 'copy','count','extend','index','insert', 'pop','remove', 'reverse','sort']
 
 >>>dir(b)
 ['__class__','__delattr__', '__dir__', '__doc__','__eq__', '__format__','__ge__' ,'__getattribute__', '__gt__','__hash__','__init__','__iter__','__le__','__length_hint__',
 '__lt__','__ne__','__new__','__next__','__reduce__','__reduce_ex__','__repr__','__setattr__', '__setstate__','__sizeof__','__str__','__subclasshook__']
교체 기 가next__ 이 방법,교체 대상 은getitem__
교체 기 는 소모 형 으로 포인터 가 이동 하면 서 옮 겨 다 니 면 비어 있 지만 None 가 아 닙 니 다.

 >>> c = list(b)
 >>> c
 [1, 2, 3]
 >>> d = list(b)
 >>> d
 []
 
 
 #   iterator    None.
 >>> if b:
 ...  print(1)
 ...
 1
 >>> if b == None:
 ...  print(1)
 ...
교체 기 내장 방법 사용next__ next()방법 과 요 소 를 옮 겨 다 니 기

 In [73]: e = iter(a)
 
 In [74]: next(e)
 Out[74]: 1
 
 In [75]: e.__next__
 Out[75]: <method-wrapper '__next__' of list_iterator object at 0x7f05571c8518>
 
 In [76]: e.__next__()
 Out[76]: 2
 
 In [77]: e.__next__()
 Out[77]: 3
 
 In [78]: e.__next__()
 ---------------------------------------------------------------------------
 StopIteration               Traceback (most recent call last)
 <ipython-input-78-6024b5bd9bd2> in <module>()
 ----> 1 e.__next__()
 StopIteration:
옮 겨 다 닐 때 StopIteration 의 오 류 를 되 돌려 줍 니 다.
for...in...반복
우리 가 하나의 iterable 에 for....................................................................................next__() (next()방법 은 iterator 가 비어 있 을 때 까지 매번 의 값 을 얻 고 StopIteration 을 순환 의 끝 기준 으로 되 돌려 줍 니 다.for..................................................
x = [1, 2, 3]
for i in x:
print(x)

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기