yield
はわかったのですが yield from
ってなんだよということで調べて generator の評価をうけとる仕組みかなという理解になりました
その理解で flatten 書いてみた
def flatten(x):
if hasattr(x, '__iter__') and not isinstance(x, str):
for y in x:
yield from flatten(y)
else:
yield x
この yield from
を yield
にすると 単に generator が返ってくるのでまあ理解あってるかなとなる
In : ls = [1,2,3,[4,5],[6,[7,8,[9,10,11],12]]]
In : list(flatten(ls))
Out: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
つかいこなせるかというとよくわからない