Python의 반복자 프로토콜 이해
Iterables & Iterators는 Python의 핵심입니다. 그것들이 무엇이며 그것들을 더 잘 이해하는 방법을 배우자.
먼저 몇 가지 정의:
Iterables: 한 번에 하나씩 멤버를 반환할 수 있는 객체를 iter-able이라고 합니다.
iterable에서 멤버를 한 번에 하나씩 가져오기 위해 Python은 내장 함수
iter()
를 제공합니다. 우리가 iter()
함수에 대한 인수로 iterable을 제공하면(반환 시 객체에 대한 __iter__()
dunder 메서드 호출) iterator라는 것을 반환합니다.코드에서 확인해 봅시다:
>>> guests = {'Luffy', 'Zorro', 'Sanji'}
>>> iter(guests)
<set_iterator object at 0x7f7983d1dab0>
위의 코드 목록은 set_iterator 객체를 반환하는 iter()로 설정된 게스트를 제공합니다. 그러나 반복자가 무엇입니까?
반복자 객체에서 내장
next()
을 반복적으로 호출하면 스트림의 다음 항목이 반환됩니다. 이를 이해하기 위해 위에서부터 코드를 계속 진행해 보겠습니다.
>>> guests = {'Luffy', 'Zorro', 'Sanji'}
>>> guest_iterator = iter(guests)
>>> next(guest_iterator)
'Zorro' # Sets are unordered
>>> next(guest_iterator)
'Luffy'
>>> next(guest_iterator)
'Sanji'
>>> next(guest_iterator) # No more items left in the set
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
위의 코드 목록에서 게스트로부터 반환된 반복자가 내장된
iter()
및 next()
함수를 사용하여 한 번에 하나의 객체를 제공할 수 있는 방법을 볼 수 있습니다.객체가 반복 가능하려면 dunder 메서드
__iter__()
가 정의되어 있어야 합니다. Iterable에서 반복자를 반환하는 __iter__()
메서드입니다.sequences
, sets
및 dictionaries
와 같은 내장 개체에는 dunder 메서드__iter__()
가 정의되어 있어 for
루프에서 사용할 수 있습니다.이제 Python이 반복을 구현하는 방법에 대해 약간의 통찰력을 얻었으므로 개체 집합을 반복하는
while
루프를 작성해 보겠습니다.>>> guests = {'Luffy', 'Zorro', 'Sanji'}
>>> guest_iterator = iter(guests) # Same as guests.__iter__()
>>> while True:
... try:
# Same as guest_iterator.__next__()
... guest = next(guest_iterator)
... print(guest)
... except StopIteration as e:
... break
Zorro
Luffy
Sanji
우리가 작성한
while
루프는 for
루프를 사용하여 이터러블을 반복할 때 후드 아래에서 발생하는 것과 매우 유사합니다. for 루프와 함께 iterables를 사용할 때 for 문이 자동으로 수행하므로 iter()
함수를 호출하거나 StopIteration
오류를 처리할 필요가 없습니다.반복자 프로토콜을 다음과 같이 설명할 수 있습니다.
iter()
함수 또는 dunder 메서드<iterable>.__iter__()
를 사용하여 객체의 반복자를 구합니다.iterator 객체에서 내장 함수
next()
또는 dunder 메서드<iterator>.__next__()
를 호출합니다. for
블록StopIteration
.iterable 및 iterator라는 용어를 재정의합시다.
Iterable: 반복을 허용하는 객체를 iter-able이라고 합니다. iterable은 iterator를 반환하는 메서드
__iter__()
를 정의해야 합니다.반복자: 반복자에는
__iter__()
메서드와 __next__()
메서드가 모두 있어야 합니다.지금까지 이터러블과 이터레이터에 대해 배운 모든 내용을 아래 표에 요약할 수 있습니다.
이 섹션에서는 이터레이터와 이터러블의 차이점을 다루었습니다. Python에 대해 자세히 알아보려면 Primer을 방문하여 Python에 대한 무료 과정을 확인하십시오. 에서 나를 팔로우할 수도 있습니다.
Reference
이 문제에 관하여(Python의 반복자 프로토콜 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/primerlabs/understanding-the-iterator-protocol-in-python-4mh4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)