yieldについて

Python2.5Docを見ても私には理解できません。

ようはyieldが入っている関数なら、イテレータを返せるよ。
一回目のnext()が実行されると関数内yieldの位置まで処理が走ってくれる。
yieldを通してreturnみたいな動作が出来るよって事なのかな。

>>> def hoge():
...     print(1)
...     print(2)
...     yield(3)
...     print(4)
...     print(5)
...     yield(6)
...
>>>
>>>
>>> a = hoge()
>>> a
<generator object hoge at 0x00C0A1C0>
>>> i = next(a)
1
2
>>> j = next(a)
4
5
>>> i
3
>>> j
6
>>>


入れ子になったシーケンスの平滑化
Pythonクックブックより引用

# 引数がListかTupleか判断
>>> def list_or_tuple(x):
...     return isinstance(x, (list,tuple))
...
# 入れ子になったシーケンスの平滑化
>>> def flatten(sequence, to_expand=list_or_tuple):
...     for item in sequence:
                # さらに分解するひつようあるか判断
...             if to_expand(item):
                        # 再帰
...                     for subitem in flatten(item, to_expand):
...                             yield subitem
...             else:
...                     yield item
...
>>>
>>> flatten([1,2,[3,4,5],(6,7),(8),9])
>>> for x in flatten([1,2,[3,4,5],(6,7),(8),9]):
...     print(x)
...
1
2
3
4
5
6
7
8
9
>>>