Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python iterable과 iterator의 차이점

<시간/>

iterable은 내장 메서드 iter()에 전달될 때 반복자를 생성하는 객체로 느슨하게 정의될 수 있습니다. 몇 가지 조건이 있습니다. 객체가 반복 가능하려면 클래스의 객체가 __len__ 및 __getitem__의 두 인스턴스 메서드를 정의해야 합니다. iter() 메서드에 전달될 때 이러한 조건을 충족하는 객체는 반복자를 생성합니다.

iterable을 이해하기 위해 아래의 예를 이해합시다 -

string = "Tutorialspoint"
for char in string:
print (char)

출력

T
u
t
o
r
i
a
l
s
p
o
i
n
t

위의 코드에서 __getitem__(index) 메서드를 사용하여 index로 지정된 위치의 요소를 반환합니다.

따라서 위의 코드 -

  • 인덱스 0으로 시작
  • string.__getitem__(인덱스) 호출
  • IndexError가 발생했습니까? 중지
  • 루프의 실행 본문
  • 인덱스 증가, 2단계로 되돌아갑니다.

반복자

반복자는 내부 상태 변수를 통해 상호 작용을 계산하는 객체로 정의됩니다. 이 경우 변수는 반복이 마지막 항목과 교차할 때 0으로 설정되지 않고 대신 StopIteration()이 발생하여 반복의 끝을 나타냅니다. 이것은 또한 반복 항목이 아래 예와 같이 한 번만 반복된다는 것을 의미합니다. −

my_list = ['itemOne', 'TutorialsPoints']
iterators_of_some_list = iter(my_list)
for i in iterators_of_some_list:
   print(i)
for j in iterators_of_some_list: # doesn't work
   print(j)
#However
for k in my_list:
   print(k)
for l in my_list: # it worked
   print(l)

출력

itemOne
TutorialsPoints
itemOne
TutorialsPoints
itemOne
TutorialsPoints

위의 코드는 반복자의 iter() 메서드가 자신을 반환하기 때문에 참입니다(현재 상태를 기억하기 위함). 그래서 위에 우리는 종료하기 위해 "for"와 유사한 루프 종류의 구현을 가지고 있습니다.