《因为在使用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)