yield,generator type

来源:互联网 发布:nginx 访问根目录 编辑:程序博客网 时间:2024/05/16 13:48

yield语句只用于定义generator函数,调用generator函数会返回一个geneator对象g; 可以通过调用g的方法控制g的运行
generator内部的变量及调用栈等都可以在generator的运行/挂起过程中得到保存,这个特性跟corountine很像,实际上像Tornado等也是利用yield,异步IO等实现的协程。

def generator():    try:        m = yield 0        print('m1', m)        m = yield m        print('m2', m)        m = yield m        print('m3', m)    except TypeError:        print('In generator type exception caught.')        yield 5    try:        yield 8        yield 9    finally:        print('clean up')if __name__ == '__main__':    gtr = generator()               # 返回一个generator    print(next(gtr))                # 运行至第一个yield语句结束并返回,gtr的局部变量,调用栈得到保留    print('before send 991')    print(gtr.send(991))    # print(next(gtr))    print(gtr.throw(TypeError, "generator throw 1."))    print(next(gtr))    gtr.close()

输出:

0                   # yield 第一个值0, 对应 yield 0before send 991     # 表明send还没运行且马上运行m1 991              # 已经执行了send, 执行了m = (yield 0)的结果,(yield 0)的结果为send传递进去的参数991991In generator type exception caught.   # throw可以被caught58clean up            # close 会导致finally部分的运行。after close
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贴了墙砖不喜欢怎么办 拉拉裤老是漏尿怎么办? 拉拉裤大了漏尿怎么办 手指指腹铁锈色怎么办 手指扎进去木刺怎么办 手被刺扎了肿了怎么办 小孩手被刺扎了怎么办 木刺扎手指里面怎么办 宝宝手掌扎了刺怎么办 睫毛掉到眼睛里怎么办 上眼皮进了沙子怎么办 沙子沾在眼睛里怎么办 睫毛老掉眼睛里怎么办 睫毛进了上眼睑怎么办 眼睛里进东西了怎么办 狗狗肚子长黑斑怎么办 手上起红斑很痒怎么办 鞋子穿久了变形怎么办 怀了别人的孩子怎么办 我怀了别人孩子怎么办 浴缸下水器坏了怎么办 车侧边锈穿了怎么办 车头底盘被刮了怎么办 车黑色塑料刮了怎么办 牙齿不平整怎么办才好 大牙边上肉肿了怎么办 牙上面肉肿了怎么办 牙上的肉肿了怎么办 牙上面的肉红肿怎么办 门牙的牙龈肿了怎么办 套了牙套2年牙疼怎么办 牙套里面牙齿痛怎么办 儿童长后牙齿痛怎么办 大牙蛀了掉了怎么办 4岁儿童大牙蛀牙怎么办 9岁儿童大牙蛀牙怎么办 8岁儿童大牙蛀牙怎么办 大牙蛀空了很臭怎么办 3岁儿童大牙蛀牙怎么办 颈椎痛怎么办快速缓解疼痛 肩膀受风肌肉疼怎么办