Python3 반복자와 생성기


반복은 Python의 가장 강력한 기능 중 하나이며 컬렉션의 요소에 액세스하는 방법입니다. .

반복자는 순회 위치를 기억할 수 있는 객체입니다.

반복자 개체는 모든 요소에 액세스할 때까지 컬렉션의 첫 번째 요소부터 액세스하기 시작합니다. 반복자는 앞으로만 갈 수 있고 뒤로 갈 수는 없습니다.

Iterator에는 iter()next()라는 두 가지 기본 메서드가 있습니다.

문자열, 목록 또는 튜플 개체를 사용하여 반복자를 만들 수 있습니다.

>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

Iterator 개체는 일반 for 문을 사용하여 탐색할 수 있습니다.

#!/usr/bin/python3

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

위 프로그램을 실행하면 출력은 다음과 같습니다.

1 2 3 4

다음을 사용할 수도 있습니다. ( ) 함수:

#!/usr/bin/python3

import sys         # 引入 sys 模块

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象

while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

위 프로그램을 실행하면 출력 결과는 다음과 같습니다.

1
2
3
4

Generator


파이썬에서는 Yield를 사용하는 함수를 제너레이터(Generator)라고 합니다.

일반 함수와 다르게 생성기는 반복자를 반환하는 함수이며 반복 작업에만 사용할 수 있습니다. 생성기는 반복자라는 것을 이해하는 것이 더 쉽습니다.

생성기를 실행하도록 호출하는 과정에서 Yield를 만날 때마다 함수는 일시 중지하고 현재 실행 중인 모든 정보를 저장하고 Yield 값을 반환합니다. 그리고 다음에 next() 메소드가 실행될 때 현재 위치에서 계속 실행됩니다.

다음 예에서는 Yield를 사용하여 피보나치 수열을 구현합니다.

#!/usr/bin/python3

import sys

def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()

위 프로그램을 실행하면 출력 결과는 다음과 같습니다.

0 1 1 2 3 5 8 13 21 34 55