>  기사  >  백엔드 개발  >  파이썬 반복자와 for 루프의 차이점

파이썬 반복자와 for 루프의 차이점

(*-*)浩
(*-*)浩원래의
2019-06-28 15:32:576199검색

Iterator(반복자):반복자 객체는 반복자가 되려면 __iter__ 및 __next__ 메서드를 모두 구현해야 합니다. 반복자의 경우 __iter__는 자체 자체를 반환하고 __next__는 반복자의 다음 값을 반환합니다. 끝에 요소가 없으면 예외가 발생합니다(예외는 개발자가 볼 수 있습니다).

파이썬 반복자와 for 루프의 차이점

1. iter는 __iter__() 메소드를 구현하기 때문에 반복 가능한 객체여야 합니다. (권장 학습: Python 비디오 튜토리얼)

2. __iter__)는 반복 가능한 객체가 반복자를 반환하도록 만들 수 있습니다.

3. 반복자의 __iter__ 메서드는 자신을 반환하고 새 반복자 개체를 생성하지 않습니다.

세 번째 속성은 반복 가능한 객체를 반복적으로 탐색할 수 있는 이유입니다(매번 독립적인 반복자를 반환하면 서로 다른 반복 프로세스가 서로 영향을 미치지 않음). 반복자가 자체적으로 반환되므로 한 번만 탐색할 수 있습니다.

for 루프의 작동 메커니즘

객체 자체가 반복자인 경우 For 루프의 작동 메커니즘은 다음과 같습니다.

__iter__ 메서드를 호출하고 자신을 반환합니다. 즉, 반복자를 반환합니다. 반복자의 next() 메서드를 계속 호출하여 매번 반복자의 값을 순서대로 반환합니다. 반복이 끝날 때 요소가 없으면 StopIteration 예외가 발생합니다.

반복 가능한 객체에서 for 루프의 작동 메커니즘은 다음과 같습니다.

먼저 객체가 반복 가능한 객체인지 여부를 결정하는 것과 동일합니다. __iter__ 또는 __getitem_ _ 메소드가 있음), 그렇지 않은 경우 오류가 직접 보고되고 TypeError 예외가 발생합니다. 그렇다면 __iter__ 메서드를 호출하고 반복자를 반환합니다. 파이썬 내부에서는 반복자의 __next__ 메서드가 계속해서 호출되며, 매번 반복자의 값이 순서대로 반환됩니다. 반복이 끝날 때 요소가 없으면 StopIteration 예외가 발생합니다. Python은 이 예외를 자체적으로 처리하고 개발자에게 노출하지 않습니다.

또한 Python의 for 루프는 실제로 두 가지 메커니즘과 호환됩니다.

객체에 __iter__가 있으면 반복자가 반환됩니다. 객체에 __iter__가 없지만 __getitem__을 구현하는 경우 아래 첨자 반복이 대신 사용됩니다. __getitem__은 객체가 카운트 및 슬라이스 작업을 수행하는 데 도움이 될 수 있습니다.

for가 __iter__는 없지만 __getitem__이 있음을 발견하면 IndexError가 발생할 때까지 0부터 시작하여 해당 첨자를 읽습니다. 이것은 오래된 반복 프로토콜입니다. iter 메소드는 이 상황도 처리합니다. __iter__가 존재하지 않으면 대신 아래 첨자 반복을 사용하여 반복자 객체를 반환합니다. 중요한 예는 str입니다. 문자열에는 __iter__ 메서드가 없지만 여전히 반복될 수 있습니다. 이유는 for 루프 중에 __getitem__ 메서드가 호출되기 때문입니다.

더 많은 Python 관련 기술 기사를 보려면 Python Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 파이썬 반복자와 for 루프의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.