1. class Solution:
  2. def flatten(self, nested):
  3. try:
  4. for sublist in nested:
  5. for element in self.flatten(sublist):
  6. print(element)
  7. yield element
  8. except TypeError:
  9. yield nested
  10. print(list(Solution().flatten([[[[1]]], 2, 3, 4, 8])))

Note

每次到 yield 时候函数会暂停,相当于 return 但不会终止,会被再次唤醒
第四次函数走flatten except 生成一个被 前边递归产生的函数消费,到最后一个flatten才轮到Solution.flatten消费,
消费完成后再一层一层从外到里检查内层 for 循环是否返程