小编pok*_*024的帖子

令人困惑的python收益行为

我偶然发现了yield今天的一个有趣的行为,我并不理解.这是我的代码:

def a():
    def b(x):
        print("entering b.")
        yield 0
        if x == 0:
            print("calling b.")
            b(x + 1)
            print("return from b.")
        print("leaving b.")

    for x in b(0):
        yield x

for x in a():
    print(x)
Run Code Online (Sandbox Code Playgroud)

那输出:

entering b.
0
calling b.
return from b.
leaving b.
Run Code Online (Sandbox Code Playgroud)

令我困惑的是显式调用b(x + 1)不调用b(!),Python也没有给出任何错误或异常.

现在,显然上面代码中的错误是b(x + 1)应该真正产生产生的值b- 所以它应该读取如下内容:

for x in b(x + 1):
  yield x
Run Code Online (Sandbox Code Playgroud)

事情就好了.

不过,这是yield我应该注意的吗?

python yield generator

2
推荐指数
1
解决办法
70
查看次数

标签 统计

generator ×1

python ×1

yield ×1