파이썬 반복문 예제
__iter___에서 만들고 반환하는 반복기 개체는 무엇입니까? 그것은 우리가 또한 우리의 for-in 반복 예제를 작동 하도록 정의 해야 하는 도우미 클래스: 명확 하 게, 무한 한 반복 파이썬에서 반복에 대 한 주요 사용 사례 되지 않습니다. 사실, 이 튜토리얼의 시작 부분까지 돌이켜 보면, 나는 동기 부여 예제로 다음 스니펫을 사용 : 많은 사람들이 데이터 과학 문제를 해결하기 위해 파이썬을 사용합니다. 경우에 따라 작업하는 데이터가 매우 클 수 있습니다. 이 경우 메모리의 모든 데이터를 로드할 수 없습니다. 우리는 발전기 또는 생성기 식의 체인을 가질 수 있습니다. 다음 예제에서는 파일 */var/log/cron*을 읽고 특정 작업(아나크론을 검색하는 예)이 성공적으로 실행되는지 확인할 수 있습니다. 그러나 단계적으로 일을 하자. 데코레이터와 마찬가지로, 이터레이터와 관련 기술은 언뜻 보기에 매우 신비하고 복잡해 보일 수 있습니다. 그래서 우리는 그것에 쉽게 합니다.
파이썬 문서에서 생성기 함수가 무엇인지 살펴보겠습니다. 따라서 발전기는 또한 거제입니다. 당신은 이터레이터 프로토콜에 대해 걱정할 필요가 없습니다. __iter___를 제공하지 않는 한 개체는 이터러블할 수 없습니다. 개체가 유효한 이터레이터가 되려면 다음에 제공해야 합니다. 실제로 루프가 Python 인터프리터 세션에서 반복기 프로토콜을 사용하는 방법을 수동으로 “에뮬레이트”할 수 있습니다: 반복기는 메모리를 절약할 수 있지만 반복기는 때때로 시간을 절약할 수 있습니다. 바로 맞습니다: 이터레이터는 예외를 사용하여 제어 흐름을 구조화합니다. 반복의 끝을 알리기 위해 파이썬 반복기는 기본 제공 StopIteration 예외를 발생시면 됩니다. 먼저 파이썬에서 베어본 이터레이터 프로토콜을 보여 주는 클래스를 작성합니다. 여기서 사용하는 예제는 다른 이터레이터 자습서에서 본 예제와 다르게 보일 수 있지만 나와 함께 견딜 수 있습니다. 이런 식으로 하면 파이썬에서 이터레이터가 어떻게 작동하는지 더 잘 이해할 수 있다고 생각합니다.
nvie.com 빈센트 드리센에 따르면, “이터리 가능한 것은 모든 객체이며 반드시 거센 을 반환 할 수있는 데이터 구조가 아닙니다”. 주요 목적은 모든 요소를 반환하는 것입니다. 이터블은 유한한 데이터 소스뿐만 아니라 무한한 소스를 나타낼 수 있습니다. 이터레이터는 호출하는 이터레이터의 도움을 받아 이터레이터 개체와 __next()_____ 메서드를 반환해야 하는 __iter____)라는 두 가지 메서드를 직접 또는 간접적으로 정의합니다. Aha! 반복기에서 사용 가능한 모든 값을 모두 소진했다는 신호로 StopIteration 예외가 발생합니다. 생성기 식을 이터레이터를 사용하는 다양한 함수에 대한 인수로 사용할 수 있습니다. A : 이것은 매우 간단한 경우입니다. 더 복잡한 이터러블은 별도의 거동이 큰 객체를 반환할 수 있습니다. 이 시점에서 반복기 프로토콜을 지원하는 Repeater 클래스가 있고 이를 증명하기 위해 for-in 루프를 실행했습니다: __iter___() 메서드는 유사하게 작동하며 작업(초기화 등)을 수행할 수 있지만 항상 반복기 개체 자체를 반환해야 합니다. 파이썬의 지퍼, 맵 및 파일러 객체도 이터레이터입니다.
이 시점에서 는 파이썬에서 이터레이터가 어떻게 작동하는지 꽤 잘 이해할 수 있습니다. 그러나 지금까지 는 영원히 반복을 계속 반복하는 반복기만 구현했습니다. 이 거리터 프로토콜 뒤에 정신 모델의 청결을 혼합하기 때문에 나는이 튜토리얼의 첫 번째 예제로이 작업을 수행하지 않기로 결정했다.