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)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.