如果您运行以下代码段,它将忽略第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)
这对其他人来说是否有点奇怪?有没有人在这里分享一些见解?
答案 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
然后程序退出。