Archive

[파이썬 기초] iterator, generator 본문

공부/Python

[파이썬 기초] iterator, generator

mariabeetle 2017. 10. 2. 19:14

1. iterator

- 값을 한 개씩 순서대로 꺼낼 수 있는 구조를 갖춘 오브젝트이다.

- 예를 들어 range()는 iterator를 생성하는 함수이고, list는 iterator를 생성할 수 있는 데이터 형이다.

- list에서 iterator를 꺼내려면 iter()함수를 사용한다.

1
2
3
4
5
6
7
8
nums = [123]
= iter(nums)
next(i)
#1
next(i)
#2
next(i)
#3
cs


2. generator

- 함수 형태이지만 리턴값으로 yield문을 사용한다.( 일반 함수는 리턴값을 return으로 반환한다.)

- yield문을 사용하면 함수 내부의 상태를 모두 저장하고, 다시 호출되면 yield로 값을 반환한 뒤 코드부터 다시 처리한다.

1
2
3
4
5
6
7
8
9
10
11
def gen1to3():
    yield 1;
    yield 2;
    yield 3;
 
it = gen1to3();
for i in it:
    print(i)
# 1
# 2
# 3
cs

3. 홀수를 반환하는 iterator 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
# 30 이하의 홀수를 반환하는 이터레이터
def genOdd():
    i = 1
    while i <= 30:
        yield i
        i += 2
 
# iterator 얻기
it = genOdd()
for v in it:
    print(v, end=",")
 
# 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,
cs


4. 소수를 반환하는 iterator 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def genPrime(maxnum):
    num = 2
    while (num <= maxnum):
        is_prime = True
        for i in range(2, num):
            if (num % i)==0:
                is_prime = False
                break
        if (is_prime): yield num
        num+=1
 
# iterator 얻기
it = genPrime(50)
for i in it:
    print(i, end=",")
# 2,3,5,7,11,13,17,19,23,27,29,31,37,41,43,47,
cs


Comments