PythonNewFunction의 하나. 각종 프로그래밍에 유용하게 활용될 수 있다. 함수가 return만 한다는 편견을 버려. yield도 한다고...
FibonacciNumber 계산예제 : FibonacciNumber.py
BinaryTree 깊이우선탐색
1 class Tree:
2 def __init__(self, value=None, left=None, right=None):
3 self.value = value
4 self.left = left
5 self.right = right
6
7 def inorder(t):
8 if t:
9 for x in inorder(t.left):
10 yield x
11 yield t.value
12 for x in inorder(t.right):
13 yield x
14
15
16 root = Tree('root')
17 root.left = Tree('left')
18 root.right = Tree('right')
19 root.left.left = Tree('left-left')
20 root.left.right = Tree('left-right')
21
22 for value in inorder(root):
23 print value
Generator가 필요한곳
- 필요할 때 마다 정보 생성(lazy evaluation)
- 모든 결과를 한꺼번에 받아서 처리하기 보다는 중간 결과를 다른 코드에서 참조해야 할 경우에 유용
- 일부 병행 프로세스나 혹은 멀티 쓰레드를 발생자로 대치 가능
- 트리 탐색이나 토큰 분석기 등이 대표적인 예
다음의 ini file Parsing예제는 앞으로 특히 나에게 많이 활용될것으로 보여진다. (출처) 눈여겨 볼 필요가 있다.
1 def iniread(f):
2 label, val = '', {}
3 for l in open(f):
4 if l.startswith('['):
5 if val:
6 yield label, val
7 label = l.strip()[1:-1]
8 val = {}
9 elif '=' in l:
10 k, v = l.strip().split('=')
11 val[k] = v
12 if label:
13 yield label, val
14
15 import pprint
16 for key, values in iniread('file1'):
17 print '[%s]' % key
18 pprint.pprint(values)
ini파일예제
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
Permutation계산에도 이용
본 기능과, list comprehension 기능이 합체하면서, GeneratorExpression 구문이 탄생하다.
관련정보