python生成器中的yield和send理解


《因为在使用Mriai编写机器人脚本,需要学习python生成器的内容,特此记录》

使用了yield关键字的函数称为生成器函数。

yield的作用是在执行到该关键字时,就会返回到调用这个函数语句的位置,继续执行后续代码,直到后续出现类似send的函数,返回到之前yield关键字的位置,将send里面的参数传递到接收yield的变量

def func1():  # 生成器函数
    print("ok1")
    x = 10  # 函数内局部变量x赋值为10
    print(x)
    x = yield 1  # 这里就是send函数的关键
    # 之前我们创建的生成器,yield左边都是没有值(我现在不是很确定这里是不是应该叫做返回值,那就先用值代替)。
    # 现在我们的x会接收到一个值,这个值是什么,从哪里来的?我们继续看下去
    print(x)
    yield x  # 这里试第二个断点
f1 = func1()  # 获取生成器对象
ret1 = next(f1)  # 运行到第一个yield
# ret1 = f1.send(None) #(这一句语句需要全部看完回头再看)当第一次执行生成器的时候,他并没有执行到yield这个位置,所以你一点传值,就会出现问题
# 谁去接收?没有对象接收就会报错,所以第一次如果一定要用send去调用,那就传一个None
print(ret1)  # 打印第一个yield返回的值

ret2 = f1.send('eee')
print(ret2)

文章作者: 一线天
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 一线天 !
  目录