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
- python生成器学习心得
- Python 生成器
- Python生成器
- python生成器
- python 生成器
- python生成器
- python生成器
- python生成器
- python生成器
- python 生成器
- python生成器
- python 生成器
- python生成器
- python 生成器
- Python--生成器
- python 生成器
- Python 生成器
- python-生成器
- 嵌入式Linux菜鸟成长记(九)
- Java回调机制
- 使用Android studio Gradle 实现友盟多渠道打包
- 《高性能mysql》之高性能索引创建(第五章)
- GFS论文中文翻译
- python生成器学习心得
- Mysql 日期,时间函数
- Struts2内置拦截器timer的使用
- 二分搜索树常见操作(C++版)
- openssl RSA DSA 加密算法使用
- 截取手机号,截取名字
- 剑指Offer面试题26复杂链表的复制,面试题27二叉搜索树和双向链表(递归)
- AVR单片机软件按钮消抖与确认
- mysql中各种类型变量的定义以及赋值使用