小编Zhe*_*hak的帖子

python中的'yield'关键字如何真正起作用,尤其是在递归时?

我正在使用python展平嵌套列表,例如[1,2,[3,4,[5,[[6,7]]]]],我想创建一个生成器,以便可以使用for循环将嵌套列表中的所有数字一一打印出来。但这并没有按我预期的那样工作。

当我将'yield'关键字替换为'print'时,数字将一一打印出来。但是,以这种方式,它不再是生成器。

以下内容无法正常工作:

from collections.abc import Iterable

def flatten(nested):
    for item in nested:
        if isinstance(item, Iterable):
            flatten(item)
        else:
            yield item
x = [1,2,[3,4,[5,[[6,7]]]]]
y = flatten(x)

for element in y:
    print(element)
Run Code Online (Sandbox Code Playgroud)

但是,如果我写了下面的一样,在这里我取代了代码yieldprint,这个数字将得到正确打印

from collections.abc import Iterable

def flatten(nested):
    for item in nested:
        if isinstance(item, Iterable):
            flatten(item)
        else:
            print(item)
x = [1,2,[3,4,[5,[[6,7]]]]]
y = flatten(x)
Run Code Online (Sandbox Code Playgroud)

如果写着:

x = [[1,2],[3,4,[5,[[6,7]]]]]
y = flatten(x)
y.__next__()
Run Code Online (Sandbox Code Playgroud)

错误消息将是 y.__next__() StopIteration

python recursion iterable yield generator

4
推荐指数
1
解决办法
56
查看次数

标签 统计

generator ×1

iterable ×1

python ×1

recursion ×1

yield ×1