Python的yield关键字
yiele关键字是什么?他是一个类似return的关键字,函数中带有该关键字时就表示是一个生成器,而不在表示一个函数了,该生成器自带一些函数比如next(),send()等。你可以先把它看成return。不过他和return的区别在于return执行完毕后就结束了,即停止。而yield执行完毕后只是暂停了,后续还可以继续使用send()来运行。如果听不懂,就先把yield当作trturn来理解。我们通过代码来理解会更好一点。
第一个列子:
1 | def test(num): |
`
运行结果:
next()函数:next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束
第二个列子:
1 | def test1(): |
运行结果:
可以看见在第二次next()输出的时候context值为none,原因是上一次运行到yield时halo的值已经赋值给content,然后输出了,而第二次运行开始的地方是第一次运行结束的地方,即直接运行了print中的内容,而没有了赋值的这一步。此时通过send()函数解决即可,因为他不是缺一个赋值吗,那我们就发送一个值给他就好了,(注意:使用send()会自动执行一次next)如下图: