Python高级用法之yield关键字

很多blog里面说,yield关键字和return关键字非常类似。只不过yield关键字更复杂一点。

我们都知道,return就是返回一个值,一般位于函数的末尾(或者说,作为函数结束的标志)。只要函数运行到return,那么这个函数的这次调用就结束了。

yield并不是这样。首先,yield返回的不是一个值,而是迭代器。yield返回值之后,并不代表函数的这次调用结束,函数会接着运行yield下面的代码。

def yt():
    yield 0
    print("yield's tail")

def rt():
    return 1
    print("return's tail")

if __name__ == '__main__':
    for i in yt():
        print(i)
    print(rt())

我们无法直接打印出yield关键字返回的值,因为带有yield关键字的函数就是一个生成器。所以需要结合for循环来使用。我们可以看看输出:

0

yield's tail

1


输出如上,屏幕上打印出了"yield's tail"这串字符,证明yield结束后,函数仍然向下运行。相比而言,return的函数并没有向下运行打印"return's tail"。这就是yield关键字的一个特性。

我们可以进一步加深对yield的理解,通过以下代码:

def yield_test(n):
    for i in range(n):
        yield i * 2
    print("\nend.")

for j in yield_test(5):
    print(j, end=' ')

在这里,完全把yield生成器的功能发挥出来了。可以看看输出:

0 2 4 6 8

end.


上面的代码就等同于:

gener = [x*2 for x in range(4)]
for i in gener:
    print(i, end=' ')
print('\nend.')

在大部分情况下,对yield关键字了解到上面这一层就够了。不过yield关键字还有更深层的意思:

yield函数保留每次运行的位置,就是知道自己函数没走完,而且知道自己走到哪里了,下次继续走

猜你喜欢

转载自blog.csdn.net/leviopku/article/details/83010764