空のイテレータを作ろうとしてハマりました。
1つだけアイテムを返すイテレータを作るのは簡単です。
def f(): yield 1
と定義しておけば、
for i in f(): print i
という感じで使えます。
0個のアイテムを返すイテレータが必要になって、はたと困りました。
失敗作を、作ったものから順番に並べると、次のように。
def f(): pass # イテレータではなく普通の関数になってしまう
def f(): yield # Noneを返すイテレータになる
def f(): raise StopIteration # イテレータを返さずに、単に例外を投げる
正解(というか期待通りに動くもの)は次のエントリで。
・・・分かってる人には当たり前だのクラッカー(ご冥福をお祈りします)かもしれませんけれど。
1つだけアイテムを返すイテレータを作るのは簡単です。
def f(): yield 1
と定義しておけば、
for i in f(): print i
という感じで使えます。
0個のアイテムを返すイテレータが必要になって、はたと困りました。
失敗作を、作ったものから順番に並べると、次のように。
def f(): pass # イテレータではなく普通の関数になってしまう
def f(): yield # Noneを返すイテレータになる
def f(): raise StopIteration # イテレータを返さずに、単に例外を投げる
正解(というか期待通りに動くもの)は次のエントリで。
・・・分かってる人には当たり前だのクラッカー(ご冥福をお祈りします)かもしれませんけれど。