저는 Alex Marteli의 Python in a Nutshell을 연구하고 있으며이 책은 next()
메서드가 있는 모든 객체가 반복자 (또는 적어도 사용할 수 있음)라고 제안 합니다 . 또한 iter
.
책에서 이것을 읽은 후 나는 그것을 시도하고 싶은 충동을 느꼈다. 나는 파이썬 2.7.3 인터프리터를 시작하고 이렇게했습니다.
>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
... print x.next()
그러나 결과는 다음과 같습니다.
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'
혼란스러워서 x 객체의 구조를 비아로 연구하려고했는데 함수 객체 dir(x)
가 있다는 것을 알았습니다 __iter__
. 그래서 나는 그것이 그 유형의 인터페이스를 지원하는 한 반복자로 사용할 수 있다는 것을 알아 냈습니다.
그래서 다시 시도했을 때 이번에는 약간 다르게 시도했습니다.
>>> _temp_iter = next(x)
이 오류가 발생했습니다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
그러나 목록이이 인터페이스를 지원하는 것처럼 보이므로 반복자가 아닐 수 있으며 다음 컨텍스트에서 목록으로 확실히 사용할 수 있습니다.
>>> for number in x:
... print x
누군가 내 마음에서 이것을 명확하게 도울 수 있습니까?
next
단순히 반환self
, 당신이 호출 할 수 있도록iter(iter(iter(iter(x))))
하고 같은 일을 얻을iter(x)
. 이것이for
타입 스니핑없이 이터 러블과 이터레이터 모두에서 작동하는 이유입니다 (성능 최적화는 무시 함).