>백엔드 개발 >파이썬 튜토리얼 >Python 프로그래밍의 반복자 프로토콜 및 순회 방법

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

WBOY
WBOY앞으로
2023-05-08 14:34:08979검색

머리말

이전 부분의 소개를 통해 Python의 반복 가능한 객체와 반복자(Iterable & Iterator)를 쉽게 이해하고 익힐 수 있습니다​​. 이번 콘텐츠에서는 iterator 관련 내용을 추가적으로 소개하겠습니다.

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

Iterator 프로토콜

Python에서 반복자(Iterator) 객체는 반복자 프로토콜을 함께 구성하는 다음 두 가지 메서드를 지원해야 합니다.

1) __iter__():

객체의 이 메서드 반복자 객체 자체를 반환합니다. 이는 for-in 문과 함께 사용되는 컨테이너 및 반복기에 필요합니다. 기본적으로 내부적으로 __iter__() 메서드를 호출하는 내장 iter() 함수를 사용할 수도 있습니다.

2)__next__():

반복자에서 다음 항목을 반환합니다. 다른 항목이 없으면 StopIteration 예외가 발생합니다. 내장된 next() 함수를 사용하여 다음 항목을 읽을 수도 있습니다. 이는 기본적으로 __next__() 메서드를 호출합니다.

앞서 말했듯이 목록, 튜플, 사전 및 세트는 모두 반복 가능한 유형입니다. 즉, 반복자를 얻을 수 있는 형식입니다. 예를 살펴보세요.

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

코드 조각 목록-01

입력 결과는 다음과 같습니다.

A
B
C

예제 코드에서는 반복 가능한 튜플을 정의합니다. 그런 다음 이 반복 가능한 객체에 대해 iter() 함수를 호출합니다. iter() 함수는 tupIter라는 이름의 반복자를 반환합니다. 그런 다음 next() 함수를 여러 번 호출합니다. next() 함수가 실행될 때마다 자동으로 반복자의 다음 항목을 반환합니다.

다음 샘플 코드를 살펴보세요.

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

Code Fragment-02

실행 출력 결과는 다음과 같습니다.

P
y

위 코드 목록에서 __iter__() 메서드는 문자열 개체에서 호출됩니다. 문자열 객체는 반복자 프로토콜을 구현하므로 문자열은 일련의 문자를 포함하는 반복 가능한 객체입니다. __iter__() 메서드를 호출하면 반복자가 직접 반환됩니다. 그런 다음 반환된 반복자를 통해 __next__() 메서드를 호출하여 반복자의 요소를 하나씩 출력합니다.

간단히 말하면, 객체가 반복자 프로토콜을 구현하는 한 위의 두 가지 방법을 사용하여 객체에 대해 반복 호출을 할 수 있습니다.

Iterator 순회

이전 소개에서 본 것처럼 next() 함수(또는 __next__() 메서드)를 사용하여 반복자의 항목을 수동으로 순회합니다. next() 함수가 반복자의 끝에 도달하면 더 이상 반환할 데이터가 없으며 StopIteration 예외가 발생합니다.

예제를 참조하세요.

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

Code Fragment List-03

위 프로그램을 실행하면 출력은 다음과 유사합니다. 20

30

추적(가장 최근 호출 마지막):

파일 ……,

print(next(listIter))

StopIteration

위 코드에서는 next() 함수가 4번 호출되는데, 이는 반복자의 항목 수보다 많습니다. 마지막 호출에서는 반복자의 요소가 반복되었기 때문에 StopIteration 예외가 발생했습니다. 또한 수동 반복이 완료된 후 예외가 발생하도록 하려면 예외 처리를 직접 수행해야 합니다. 그렇지 않으면 후속 실행이 더 이상 정상적이지 않습니다.

깨달아야 할 것은 대부분의 시나리오에서 수동으로 next 메서드를 호출할 필요가 없다는 것입니다. Python의 for 루프는 반복자를 반환할 수 있는 모든 객체를 자동으로 순회할 수 있습니다. 즉, for 루프는 Python의 모든 반복 가능한 객체를 반복할 수 있습니다.

예제를 참조하세요.

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

코드 목록 조각 04

위 코드에서는 for 루프를 사용하여 이전에 정의한 목록을 반복합니다. next() 함수를 수동으로 사용하지 않았으며 StopIteration 예외도 발생하지 않았음이 분명합니다. 이것이 Python의 for 루프의 장점입니다. 이는 뒤에서 우리를 위해 이 모든 것을 처리합니다.

물론, 우리는 이런 식으로 루프 반복을 스스로 처리할 수 있습니다. 이제 for 루프의 자체 버전을 정의하십시오. while 루프를 사용하고 for 루프의 동작을 복제하겠습니다. 여기에서는 이 구현에 필요한 모든 것을 직접 구축합니다. 아래와 같이:

Python 프로그래밍의 반복자 프로토콜 및 순회 방법

코드 목록 Snippet-05

위 목록에서는 자체 버전의 시뮬레이션된 for 루프를 구현했습니다. 코드에서는 무한 while 루프가 사용됩니다: while True. Try-Exception 블록은 루프 내부에 설정됩니다. try 블록에서 반복자에 대해 __next__() 메서드를 호출하여 다음 요소를 가져옵니다. 호출이 성공하면 요소가 인쇄됩니다. StopIteration 유형의 오류가 발생하면 예외는 Except 블록에서 포착됩니다. Except 블록에서 수행하는 작업은 매우 간단합니다. 우리는 이 루프에서 빠져나왔습니다. 이는 반복자의 끝에 도달했음을 의미합니다.

요약

반복자 프로토콜과 반복자 탐색을 주로 소개하는 이 글은 여기까지입니다. 내용의 텍스트는 길지 않으며 코드와 결합하면 이러한 Python 프로그래밍 지식 포인트를 더 잘 이해하고 숙달하는 데 도움이 될 수 있습니다.

위 내용은 Python 프로그래밍의 반복자 프로토콜 및 순회 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제