第一个代码相比第二个代码加入了在引用本函数的时候使用yield from,第一个代码的结果是[1,2,3,4,5],第二个代码块的结果是[1,2,3],想问下为什么不加yield from 就无法进行递归执行呀?
def flatten(list_):
list_unf = list_
print(list_unf)
for list_pro in list_unf:
if not isinstance(list_pro,list):
yield list_pro
else:
list_dev = list_pro
yield from flatten(list_dev)
list(flatten([1,2,3,[4,5]]))
def flatten(list_):
list_unf = list_
print(list_unf)
for list_pro in list_unf:
if not isinstance(list_pro,list):
yield list_pro
else:
list_dev = list_pro
flatten(list_dev)
list(flatten([1,2,3,[4,5]]))
yield from 就相当于 return ,把当下一层递归 yield的返回值再返回给上一层递归
这样一层一层的向上层返回,形成返回链。
不加yield from 就等于断了返回链