美文网首页python学习
python的yield与send实例详解

python的yield与send实例详解

作者: HearnWING | 来源:发表于2017-02-14 15:22 被阅读279次

首先看两段代码及其输出

def gener(num):
    while True:
        print("0:before yield num is: %d" % num) 
        num = yield 
        print("1:after yield num  is %d" % num) 
    print("exc end")

g = gener(1)
g.send(None)
print("goto loop")
for i in range(5):
    print("---loop---")
    print(">>>>send back:" + str(g.send(i)))


# 输出为 >>
0:before yield num is: 1
goto loop
---loop---
1:after yield num  is 0
0:before yield num is: 0
>>>>send back:None
---loop---
1:after yield num  is 1
0:before yield num is: 1
>>>>send back:None

def gener(num):
    while True:
        print("0:before yield num is: %d" % num) 
        num = yield num**2 # 代码唯一有变化的地方
        print("1:after yield num  is %d" % num) 
    print("exc end")

g = gener(1)
g.send(None)
print("goto loop")
for i in range(5):
    print("---loop---")
    print(">>>>send back:" + str(g.send(i)))


# 输出为 >>
0:before yield num is: 1
goto loop
---loop---
1:after yield num  is 0
0:before yield num is: 0
>>>>send back:0
---loop---
1:after yield num  is 1
0:before yield num is: 1
>>>>send back:1

分析

generator函数调用后,第一次send(None),generator执行到yield之前,之后每次调用send(), 从yield所在行开始执行,运行到片段结尾或再次遇到yield, generator从yield中接受参数,如果yield后有表达式,则返回表达式的值,类似return关键字的功能。yield关键字保存了generator每次的执行状态。

相关文章

  • python的yield与send实例详解

    首先看两段代码及其输出 分析 generator函数调用后,第一次send(None),generator执行到y...

  • Python3中asyncio异步详解一

    在学习asyncio相关的知识前,如果有同学没有读到Python3中yield与yield from详解[http...

  • Python协程详解:从yield/send到yield fro

    Python中的协程发展历史分为三个阶段: 最初的生成器变形yield/send 引入@asyncio.corou...

  • python中yield的用法

    python中yield的用法详解——最简单,最清晰的解释

  • yeild的用法

    python中yield的用法详解——最简单,最清晰的解释

  • Python yield

    Python yield的用法详解 如何快速的对yield有一个初步的了解,那么首先我们可以先将yield看做是r...

  • python的生成器是怎么回事

    Python基础 - yield 用法详解 转载:http://www.pythontab.com/html/20...

  • Python中的yield和send

    创建生成器yield 1、第一种方法: 输出为: 2、第二种方法 输出为: 可以看到,调用next方法后输出第一个...

  • 协程

    生成器语法 yield 一个对象返回这个对象 暂停这个函数等待下次next重新激活 send与yield的切换...

  • python中yield的用法详解(转)

    原链接:python中yield的用法详解——最简单,最清晰的解释首先,如果你还没有对yield有个初步分认识,那...

网友评论

    本文标题:python的yield与send实例详解

    本文链接:https://www.haomeiwen.com/subject/ibwxwttx.html