我偶然发现了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我应该注意的吗?