イテラブルを取る関数を作成したいとします。その iterable には、任意のレベルの他の iterable を含めることができます。これらを順番にたどる関数を作りたいです。たとえば、次のようになります。
import collections
def it(l):
for i in l:
if isinstance(i, collections.Iterable):
it(i)
else:
print i
it([ [1, 2, 3], [[4, [5, 6]], 7], 8, [9, 10]])
これにより、次の出力が生成されます (予想どおり): 1 2 3 4 5 6 7 8 9 10
ジェネレーターでこれをやりたいとは思わない。次のことが期待どおりに機能しないのはなぜですか(基本的に、printステートメントをyieldに置き換えます):
import collections
def it(l):
for i in l:
if isinstance(i, collections.Iterable):
it(i)
else:
yield i
ありがとう!