English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

파이썬 기본 강의

파이썬 프로세스 제어

Python 함수

Python 데이터 타입

Python 파일 작업

O

Python 객체와 클래스

Python 날짜와 시간

Python 고급 지식

Python 이터레이터

Python 참조 매뉴얼

이터레이터는 반복할 수 있는 객체입니다. 이 튜토리얼에서는 이터레이터의 작동 방식과 __iter__와 __next__ 메서드를 사용하여 자신의 이터레이터를 구축하는 방법을 배울 것입니다.

파이썬의 이터레이터는 무엇인가요?

이터레이터는 파이썬에서 어디서나 존재합니다. 그들은 for 루프, comprehension, generator 등에서 우아하게 구현되지만, 눈에 띄지 않게 있습니다.파이썬의 이터레이터는 단순히 반복할 수 있는 객체입니다.객체

다음은 데이터를 한 개의 요소씩 반환하는 객체입니다. 기술적으로, 파이썬이터레이터 객체이를 통해 __iter__()와 __next__()라는 두 개의 특수 메서드를 구현해야 합니다. 이 두 메서드는

이터레이터 프로토콜반복 가능한 객체에서 이터레이터를 얻을 수 있다면, 이 객체는반복. 파이썬에서 대부분의 내장 컨테이너(예:list,tuple,string등)은 반복 가능합니다.

iter() function (or __iter__() method) returns an iterator from them.

Python에서 이터레이터를 사용하여 반복

we use the next() function to manually traverse all items of the iterator. When we reach the end and there is no more data to return, it will raise StopIteration. Here is an example...

#    목록을 정의합니다
my_list = [4, 7,    0, 3]
#    iter()를 사용하여 이터레이터를 얻습니다
my_iter = iter(my_list)
##    iter()를 사용하여 이터레이터를 얻습니다 
#출력 4
print(next(my_iter))
#출력 7
print(next(my_iter))
##    next(obj)와 obj.__next__()는 같습니다
#출력 0
print(my_iter.__next__())
#출력 3
print(my_iter.__next__())
##    이는 더 이상 요소가 없다는 오류를 일으킵니다
next(my_iter)

자동 반복을 더 우아하게 할 수 있는 방법은 다음과 같습니다.for 루프이 방법을 사용하면, 예를 들어 목록, 문자열, 파일 등 반복 가능한 모든 객체를 반복할 수 있습니다.

>>>    for    element    in    my_list:
...    print(element)
...     
4
7
0
3

for 루프는 어떻게 작동합니까?

위의 예제에서 보았듯이, for 루프는 자동으로 목록을 반복할 수 있습니다.

실제로 for 루프는 어떤 상대적으로 가능한 모든 반복 가능한 객체를 반복할 수 있습니다. 파이썬에서 for 루프가 어떻게 실제로 반복을 구현하는지 자세히 보도록 하겠습니다.

for element in iterable:
    # 요소에 대해 무엇인가를 수행

그러나 실제로는 이렇게 구현됩니다.

# 이터레이블 객체 iterable을 생성
iter_obj = iter(iterable)
# 무한 루프
while True:
    try:
        # 다음 항목을 가져오기
        element = next(iter_obj)
        # 요소에 대해 무엇인가를 수행
    except StopIteration:
        # StopIteration가 발생하면 루프에서 벗어나기
        break

따라서, 내부에서 for 루프는 iterable에 iter()를 호출하여 이터레이터 객체 iter_obj를 생성합니다.

ironically, this for loop is actually infinitewhile 루프

루프 내에서, 그는 next()를 호출하여 다음 요소를 가져오고 이 값을 사용하여 for 루프의 주체를 실행합니다. 모든 항목이 끝났을 때, StopIteration가 투척되고 내부에서 잡혀서 루프가 끝납니다. 주의하십시오, 다른 모든 유형의 예외는 통과합니다.

Python으로 이터레이터를 구축하는 방법

Python에서 이터레이터를 처음부터 구축하는 것은 쉽습니다. 우리는 단지 이 메서드 __iter__()와 __next__()를 구현하면 됩니다.

__iter__() 메서드는 이터레이터 객체 자체를 반환합니다. 필요하다면 초기화를 수행할 수 있습니다.

__next__() 메서드는 시퀀스의 다음 항목을 반환해야 합니다. 끝에 도달했을 때以及在 그 이후의 호출에서, 그는 StopIteration를 발생시켜야 합니다.

여기서, 우리는 예제를 보여주고 있습니다. 이 예제는 반복마다 우리에게2의 지수. 지수는 0에서 사용자가 설정한 숫자까지입니다.

class PowTwo:
    """이터레이터 클래스를 구현하는 것"
             2의 幂"""
    def __init__(self, max = 0):
        self.max = max
    def __iter__(self):
        self.n = 0
        return self
    def __next__(self):
        if self.n <= self.max:
            result = 2 ** self.n
            self.n += 1
            return result
        else:
            raise StopIteration

지금, 우리는 이터레이터를 생성하고 다음과 같이 반복할 수 있습니다.

>>> a = PowTwo(4)
>>> i = iter(a)
>>> next(i)
1
>>> next(i)
2
>>> next(i)
4
>>> next(i)
8
>>> next(i)
16
>>> next(i)
Traceback (most recent call last):
...
StopIteration

우리는 또한 for 루프를 사용하여 이터레이터 클래스를 반복할 수 있습니다.

>>> for i in PowTwo(5):
...     print(i)
...     
1
2
4
8
16
32

파이썬 무한 이터레이터

이터레이터 객체의 항목은 결코 소비되지 않습니다. 무한한 이터레이터(결코 끝나지 않는)가 있을 수 있습니다. 이러한 이터레이터를 처리할 때는 주의해야 합니다。

이는 무한 이터레이터를 보여주는 간단한 예제입니다。

내장 함수 iter()은 두 개의 매개변수를 호출할 수 있습니다. 첫 번째 매개변수는 호출할 수 있는 객체(함수)여야 하며 두 번째 매개변수는 표시자입니다. 이터레이터는 이 함수를 호출하여 반환 값이 표시자 값과 일치하는까지 호출합니다。

>>> int()
0
>>> inf = iter(int,1)
>>> next(inf)
0
>>> next(inf)
0

int() 함수는 항상 0을 반환합니다. 따라서 iter(int,1)전달은 int() 함수를 호출하는 이터레이터를 반환합니다. 그런 다음 return 값이1이는 결코 일어나지 않으며 무한 이터레이터를 얻습니다。

우리는 또한 자신의 무한 이터레이터를 구축할 수 있습니다. 이론적으로 다음 이터레이터는 모든奇수를 반환합니다。

class InfIter:
    """무한 이터레이터는 모든
                 초기奇数"""
    def __iter__(self):
        self.num = 1
        return self
    def __next__(self):
        num = self.num
        self.num += 2
        return num

실행 결과는 다음과 같습니다。

>>> a = iter(InfIter())
>>> next(a)
1
>>> next(a)
3
>>> next(a)
5
>>> next(a)
7

等等...

이러한 유형의 무한 이터레이터에서 반복을 수행할 때는 종료 조건을 주의해야 합니다。

이터레이터 사용의 장점은 자원을 절약합니다. 위와 같이 모든奇수를 메모리에 저장하지 않고도 모든奇수를 얻을 수 있습니다. 이론적으로는 제한된 메모리에서 무한한 항목을 포함할 수 있습니다。

이터레이터는 또한我们的 코드가 매우 예쁘게 보이게 합니다。

파이썬에서 이터레이터를 생성하는 간단한 방법이 있습니다. 더 많은 정보를 얻으려면 다음 사이트를 방문하세요:파이썬 제너레이터 yield