python生成器学习心得

来源:互联网 发布:小林一茶 知乎 编辑:程序博客网 时间:2024/05/15 13:10
关于生成器的优秀教程有很多。看了不少教程后以为弄明白生成器是怎么回事了,结果对廖雪峰pyhon教程协程一课中生成器案例(点击打开链接)和类似的生成器案例(点击打开链接)没看懂。后来又看了《python生成器详解》(点击打开链接)一文对send()方法的阐述,才理解了上述的两个案例。本文是对send()方法的进一步补充(若本人理解错误,烦请大家指正)。以下为一个生成函数案例,引用自《python生成器详解》中的例子,并稍作了修改。
# --*-- coding: utf-8 --*--import random, timedef echo(value=None):    while True:        a = (yield value)        print("The a is", a)        print ('The value is', value)        if value:            value += 1        print ('The value is', value)            g = echo(1)print g.next()print g.send(3)print g.send(8)print g.send(10)

。以下为代码调试

1('The a is', 3)('The value is', 1)('The value is', 2)2('The a is', 8)('The value is', 2)('The value is', 3)3('The a is', 10)('The value is', 3)('The value is', 4)4
当调用g.next()时,执行yield value 生成1,函数暂停并返回1,注意此时函数不会执行“将1附给变量a”。接着调用g.send(3),接下来的函数执行步骤依次为:(1)参数3作为表达式(yield value)的值,并附给变量a返回,函数yield恢复从执行a=yield表达式开始。(2)上次函数暂停时value=1,将此value代入value += 1,得到value=2(#解释了输出('The value is', 1)('The value is', 2))。(3)执行yield value 生成2,函数暂停并返回2,注意此时函数仍不会执行“将2附给变量a”后面的g.send(8)和g.send(10)步骤以此类推。










0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魔域手游账号被冻结怎么办 魔域手游没用的装备怎么办 5173账号三年找回怎么办 电脑的任务栏不见了怎么办 减肥出现瓶颈期怎么办 减肥到瓶颈期怎么办 减脂皮肤松弛怎么办 减肥期间上火了怎么办 涂了瘦身霜好辣怎么办 站起来就头晕怎么办 蹲了起来头晕怎么办 蛙跳后大腿疼怎么办 头低久了脖子痛怎么办 边防武警改革义务兵怎么办 家门钥匙丢了怎么办 森警改革士官怎么办 武警改制后士兵怎么办 消防改革时新兵怎么办 腈纶衣服染色了怎么办 部队新兵体能训练不及格怎么办 做足疗私处有了反应怎么办 跑步跑不起来怎么办 28岁有抬头纹怎么办? 眼睛近视加散光怎么办 眼睛近视又散光怎么办 眼睛近视有散光怎么办 眼睛不近视散光怎么办 孩子眼睛近视散光怎么办 小孩眼睛散光近视怎么办 眼睛近视和散光怎么办 考军校体能不行怎么办 高中体测不及格怎么办 刚开始跑步腿疼怎么办 刚跑步腿酸痛怎么办 小孩走路像鸭子怎么办 走完鸭子步腿疼怎么办 宝宝走路右脚往外撇怎么办 1岁宝宝罗圈腿怎么办 宝宝走路腿弯怎么办 路走多了腿疼怎么办 蛙跳完大腿疼怎么办