yield小测试题

作者: 余生还长你别慌 | 来源:发表于2019-08-23 13:19 被阅读0次

前面提到了协程,就会想起协程的基础-生成器,想起生成器就会想到yield。那就顺便记下这个yield的小测试题,每天看一眼,不然很容易遗忘。

这个yield小测试题主要的点有两个:

  1. next和send效果是一样的,区别就是next会送一个None给yield所在的函数,也就是例子中的fun_yield,而send会送后面括号里的值给fun_yield;
  2. 送进去的值谁来接收呢,那就是k来接收,你没看错:就是k = yield index的这个k拉接收。例如,运行一次next,k就被赋予None,然后调用一次send(2),k就被赋予了2。

记住这两点,下面的程序运行结果就不难理解了。然后从运行结果也看出为什么说生成器是协程的基础,例如index的值最终会被逐个输出,但是中间会插入send进去的值,这就像是一个程序被阻塞后加入了另一个程序到内存中执行,不就是协程的思想吗?

# -*- encoding=UTF-8 -*-
__author__ = 'wjj1982'
__date__ = '2019/8/23 11:21'
__product__ = 'PyCharm'
__filename__ = 'yield测试'

def fun_yield(N):
    index = 0
    for i in range(N):
        k = yield index
        print(k)
        index += 1


def main():
    """1.先定义一个函数,里面带有yield
    2. main函数引用,并send和next几个值"""
    fun = fun_yield(15)
    for i in range(4):
        print(next(fun))
        print(fun.send(2))

if __name__ == '__main__':
    main()

yield测试.jpg

相关文章

网友评论

    本文标题:yield小测试题

    本文链接:https://www.haomeiwen.com/subject/sggzsctx.html