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 >>>