本文共 1061 字,大约阅读时间需要 3 分钟。
# -*- encoding: utf-8 -*-import functoolsimport 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 ** 2response = 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 += 1def useSquare(): sq = squares() print next(sq) print next(sq) print sq.send(7) print next(sq)def process(): useSquare()if __name__ == "__main__": process()
转载地址:http://nvlfn.baihongyu.com/