无法访问的'yield'仍然会对函数产生奇怪的影响

时间:2018-05-28 17:46:24

标签: python python-3.x iterator yield control-flow

如果您运行以下代码段,它将忽略第2行的'print'和第3行的'exit'。但是,如果您从第4行注释掉已无法访问的'yield' ,第2行和第3行将正常执行。

这让我觉得Python(3.5.2)在函数的任何地方寻找'yield',如果找到一个,甚至是一个无法访问的那个,在返回的迭代器上调用next()之前不执行任何操作。到目前为止,我的印象是函数会在达到yield之前正常执行,此时它将像迭代器一样起作用。

def func():
    print("> Why doesn't this line print?")
    exit() # Within this function, nothing should matter after this point.  The program should exit
    yield "> The exit line above will exit ONLY if you comment out this line."


x = func()
print(x)

这对其他人来说是否有点奇怪?有没有人在这里分享一些见解?

2 个答案:

答案 0 :(得分:0)

当函数具有yield时,即使它不可达,它也将是一个生成器。

答案 1 :(得分:0)

这里的事情是yield声明。在函数内部使用yield时,它将创建一个生成器。请记住,具有yield的任何函数都会在调用时返回生成器。

试试这个:

def func():
    print("> Why doesn't this line print?")
    exit()

x = func()
print(x)

<强>结果:

Why doesn't this line print?
None

然后程序退出。