Python高级编程 读书笔记: 6、 第3章_生成器之间的交互

# -*- encoding: utf-8 -*-

import functools
import time

'''
6、 第3章_生成器之间的交互

关键:
1 生成器的交互
生成器协议: 提供了send方法,该方法允许生成器的反向沟通。
            如果使用send方法而不是next重启生成器,那么提供给send方法的值实际上能被赋予给yield表达式的结果

原理:
生成器函数执行到yield表达式,消耗生成器的代码,通过send方法给
生成器传回一个值,生成器收到了send函数传进来的这个值后,会视为是yield
表达式的执行结果

2 生成器交互的样例
def squares(cursor=1):
    while True:
        response = yield cursor ** 2
        if response:
            cursor = int(response)
        else:
            cursor += 1
分析:
所以这里如果send传入的值为7,那么记住:
response = yield cursor ** 2
不等同于
yield cursor ** 2
response = cursor ** 2
也就是response的值不是7 ** 2为49,而就是send传入的原始值7,
因为根据原理的描述: 
生成器接受到send传入的值会被作为yield表达式的结果
如果没有通过send传入值,那么: response = yield cursor ** 2的yield表达式结果为None


 
参考:
Python高级编程

'''

def squares(cursor=1):
    import pdb;pdb.set_trace()
    while True:
        response = yield cursor ** 2
        if response:
            cursor = int(response)
        else:
            cursor += 1


def useSquare():
    sq = squares()
    print next(sq)
    print next(sq)
    print sq.send(7)
    print next(sq)


def process():
    useSquare()


if __name__ == "__main__":
    process() 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值