yield表达式形式应用的定义 在一个生成器函数内,将yield赋值给一个变量,这就是yield的表达式形式,也叫生成器的表达式形式 send方法定义 yield的表达式形式下面有一个send方法,它的作用和next方法是一样的,都是在触发函数继续往下走,除了具有next功能外,还有传值的效果,send传 值的方式是先把要传的值交给yield,再由yield赋值给事先定义的变量名,最后才触发next效果 def foo(): print('start') while True: x=yield print('value:',x) g=foo()#得到生成器 next(g)#初始化生成器 打印'start',但此时函数位置已经在yield暂停了 g.send(None)#把None传给yield,相当于不传值,只有next效果,等同于next(生成器变量),一般用于生成器表达式的初始化操作 g.send(1)#由send现将1传给上一次yield暂停的位置,再由yield把1赋值给x,最后函数在接着往下走,直到碰到yield函数才暂停 yield表达式形式的初始化 定义 生成器一定要走到一个暂停的位置,然后才能send传值,因为send的特性是基于一个已经暂停的yield进行传值然后再接着往下走 如果对生成器表达式形式不进行初始化操作而直接进行传值则会报以下错误 TypeError: can't send non-None value to a just-started generator 类型错误:不能将非零值发送给刚刚启动的生成器 解决方法:必须先初始化才能传值,初始化只有两个方法 send(None)给生成器表达式或next(g)