generator function 的递归

第一个代码相比第二个代码加入了在引用本函数的时候使用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 就等于断了返回链