2017-04-19 2 views
2

나는 반복문 인 i 목록을 정의한다. 코드에서 알 수 있듯이 __iter __() 메서드를 호출하면 반복기가 반환됩니다. 하지만 next() 메서드를 네 번 호출하면 1,2,3,4가 아닌 네 번만 출력됩니다.변수에 반복자를 할당 할 때 무슨 일이 일어나는가

>>> i=[1,2,3,4] 
>>> i.__iter__ 
<method-wrapper '__iter__' of list object at 0x04040378> 
>>> i.__iter__() 
<listiterator object at 0x040561F0> 
>>> i.__iter__().next() 
1 
>>> i.__iter__().next() 
1 
>>> i.__iter__().next() 
1 
>>> i.__iter__().next() 
1 

그래서 내가 뭔가 타격 :

>>>ite=i.__iter__() 
>>>ite.next() 
1 
>>>ite.next() 
2 
>>>ite.next() 
3 
>>>ite.next() 
4 
>>> ite.next() 

Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    ite.next() 
StopIteration 

아무도 나에게이 두 가지 방법 사이의 차이를 말할 수합니까? Tx a lot :

+0

첫 번째 버전에서는 * 네 개의 반복기 *를 요구합니다. – user2357112

+0

감사합니다. 알 겠어. – yikayiyo

답변

4

__iter__에 전화 할 때마다 새로운 반복기가 생성됩니다. 첫 번째 예에서는 __iter__을 네 번 호출하므로 네 개의 새 반복기가 제공되고 각각 next 번으로 호출되므로 항상 첫 번째 값을 얻습니다. 두 번째 예제에서는 __iter__을 한 번 호출하므로 하나의 반복자 만 얻고 동일한 반복자에서 next을 네 번 호출하면 네 개의 값을 모두 얻을 수 있습니다.

+0

오, 이런. 네 개의 이터레이터는 서로 다른 주소에 있습니다; D 감사합니다. – yikayiyo

관련 문제