解答編。
思いついたもので、ちゃんと動くものから順に。
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がいいと思うのですが、まあ気分の問題かも。
思いついたもので、ちゃんと動くものから順に。
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がいいと思うのですが、まあ気分の問題かも。