路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

Python、空のイテレーター その1

2010-02-19 13:18:36 | プログラミング
空のイテレータを作ろうとしてハマりました。

1つだけアイテムを返すイテレータを作るのは簡単です。
def f(): yield 1
と定義しておけば、
for i in f(): print i
という感じで使えます。

0個のアイテムを返すイテレータが必要になって、はたと困りました。

失敗作を、作ったものから順番に並べると、次のように。

def f(): pass # イテレータではなく普通の関数になってしまう
def f(): yield # Noneを返すイテレータになる
def f(): raise StopIteration # イテレータを返さずに、単に例外を投げる

正解(というか期待通りに動くもの)は次のエントリで。

・・・分かってる人には当たり前だのクラッカー(ご冥福をお祈りします)かもしれませんけれど。