공부/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 = [1, 2, 3] i = 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 |