路傍のプログラマ

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

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

2010-02-22 18:31:24 | プログラミング
解答編。

思いついたもので、ちゃんと動くものから順に。

def s1():
 for i in (): yield i

def s2():
 raise StopIteration
 yield # dummy

def s3(): return iter([])

s1は動作としては正しいけど、何となく野暮ったい。

s3はちょっと違う気がします。

なぜなら、s3自体はイテレータではなく、s3がイテレータを返す、という実装だから。この違いは、ちょっとしたきっかけで表面化します。

例えば、yieldを付け足したくなったとき

def s3kai(x):
 if x ....:
  yield 1
  yield 2
 else:
  return iter([])

がエラーになったり。

というわけで、個人的にはs2がいいと思うのですが、まあ気分の問題かも。

最新の画像もっと見る