织梦网站模板使用教程,制作网站链接,佛山住建,ui图标素材网简单了解下生成器generator#xff0c;主要是yield的返回值和send的传参#xff0c;记录下。生成器的基本属性generator 函数 yield简单说#xff0c;就是一个函数#xff0c;里面用到了关键字yield#xff0c;就成为了一个生成器生成器和函数的不同主要在于#xff1a…简单了解下生成器generator主要是yield的返回值和send的传参记录下。生成器的基本属性generator 函数 yield简单说就是一个函数里面用到了关键字yield就成为了一个生成器生成器和函数的不同主要在于直接调用生成器不会执行举个栗子a f() #这里f()是个生成器运行上面这句f()不会执行首次执行需要使用next(a)或a.send(None)后面会细讲每次执行会暂时中断在yield关键字处而且通过yield可以返回一个参数下次再接着执行会从上次中断的yield处接着执行并可以通过send()传递参数当然继续中断在下一个yield处如果通过send()或next()执行generator而没有找到下一个yield会报错yield返回值传参总结就是return send(msg)传递参数msg给当前中断yield前面的变量同时返回下一个yield后面的参数给returnreturn next(a)没有传递参数或者说传递参数None给当前中断yield前面的变量同时返回下一个yield后面的参数给return直接看下面的栗子直观明了#生成器def f():print(start)a yield 1 #可以返回参数1并接收传递的参数给aprint(a)print(middle)b yield 2 #可以返回参数2并接收传递的参数给bprint(b)print(next)c yield 3 #可以返回参数3并接收传递的参数给cprint(c) #这里貌似永远不会执行因为总会在上一行的yield处结束a f() #这里不会执行即没有任何打印信息#a.next() #这种写法在python3里面会报错return1 next(a)#输出start中断在yield 1处返回yield后面的1给return1#return1 a.send(None) #效果同上一条语句#return1 a.send(test) #这里会报错#如果首次执行generator就传递一个非None的参数因为第一次执行不是从一般的中断yield处执行起所以没有yield关键字来接收传参就会报错print(return1)return2 next(a)#传入参数为None即aNone返回2给return2print(return2)return3 a.send(msg)#传入参数msg即bmsg,返回3给return3print(return3)执行结果如下start1Nonemiddle2msgnext3[Finished in 0.7s]