生成器表达式(待补充)

Posted When you look into the abyss,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器表达式(待补充)相关的知识,希望对你有一定的参考价值。

 

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: cant send non-None value to a just-started generator
类型错误:不能将非零值发送给刚刚启动的生成器
解决方法:必须先初始化才能传值,初始化只有两个方法
send(None)给生成器表达式或next(g)

 

以上是关于生成器表达式(待补充)的主要内容,如果未能解决你的问题,请参考以下文章

python介绍和基础(待补充)

MySQL连接表---待补充

requests库中常用的方法(待补充)

mysql过滤数据-------------------------待补充

面向对象高级C(元类补充及单例模式(待补充))

vs 2010代码片段