PythonNewFunction의 하나. 각종 프로그래밍에 유용하게 활용될 수 있다. 함수가 return만 한다는 편견을 버려. yield도 한다고... FibonacciNumber 계산예제 : [[FibonacciNumber.py]] BinaryTree 깊이우선탐색 {{{#!python class Tree: def __init__(self, value=None, left=None, right=None): self.value = value self.left = left self.right = right def inorder(t): if t: for x in inorder(t.left): yield x yield t.value for x in inorder(t.right): yield x root = Tree('root') root.left = Tree('left') root.right = Tree('right') root.left.left = Tree('left-left') root.left.right = Tree('left-right') for value in inorder(root): print value }}} Generator가 필요한곳 * 필요할 때 마다 정보 생성(lazy evaluation) * 모든 결과를 한꺼번에 받아서 처리하기 보다는 중간 결과를 다른 코드에서 참조해야 할 경우에 유용 * 일부 병행 프로세스나 혹은 멀티 쓰레드를 발생자로 대치 가능 * 트리 탐색이나 토큰 분석기 등이 대표적인 예 다음의 ini file [[Parsing]]예제는 앞으로 특히 나에게 많이 활용될것으로 보여진다. ([[http://openlook.org/distfiles/seminar/040429/iniread.py|출처]]) 눈여겨 볼 필요가 있다. {{{#!python def iniread(f): label, val = '', {} for l in open(f): if l.startswith('['): if val: yield label, val label = l.strip()[1:-1] val = {} elif '=' in l: k, v = l.strip().split('=') val[k] = v if label: yield label, val import pprint for key, values in iniread('file1'): print '[%s]' % key 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 구문이 탄생하다. 관련정보 * [[http://www.whiterabbitpress.com/lg/issue100tag/pramode.html|파이썬 Generator 사용법]] * [[http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/|Improve Your Python: 'yield' and Generators Explained]]