zoukankan      html  css  js  c++  java
  • 零基础学python-19.7 扩展生成器函数

    这一章节我们来讨论一下扩展生成器函数:send函数

    回顾一下上一章节我们介绍yield的应用:

    >>> def test():
    	for x in range(3):
    		yield x
    
    		
    >>> x=test()
    >>> next(x)
    0
    >>> next(x)
    1

    我们这一章节在next()和__next__()之外,再介绍一个函数send,他主要的作用就是跟生成器通信,并且返回计算结果

    下面我先举例:

    >>> def test():
    	for x in range(4):
    		y=yield x
    		print(y)
    
    		
    >>> test()
    <generator object test at 0x01E69A58>
    >>> a=test()
    >>> next(a)
    0
    >>> a.send (99)
    99
    1
    >>> a.send (88)
    88
    2
    >>> a.send (5)
    5
    3
    >>> a.send (6)
    6
    Traceback (most recent call last):
      File "<pyshell#35>", line 1, in <module>
        a.send (6)
    StopIteration

    从上面的代码可以看见,使用send跟next的计算差不多,我们下面来分解一下send的步骤:

    1.先把send里面的参数赋值给生成器函数yield x

    2.然后再执行print(y)这一句

    3.执行生成器函数

    4.把控制器交还给函数

    注意:第一句是不可以直接使用send,会报错

    >>> def test():
    	for x in range(4):
    		y=(yield x)+2
    
    		
    >>> a=test()
    >>> a.send (5)
    Traceback (most recent call last):
      File "<pyshell#50>", line 1, in <module>
        a.send (5)
    TypeError: can't send non-None value to a just-started generator

    我们下面再举一个比较明显的例子:

    >>> def test():
    	for x in range(4):
    		y=(yield x)+2
    		print(y)
    
    		
    >>> a=test()
    >>> next(a)
    0
    >>> a.send (5)
    7
    1
    >>> a.send (10)
    12
    2

    从上面的代码可以看见,send里面的参数已经真个替代了yield x这个生成器,然后计算y=N+2,得出y的结果,然后再打印出来,接着执行生成器,最后交还控制器并记录函数状态


    总结:这一章节讨论了生成器函数的方法send,并且解析send的执行步骤,还有介绍send需要注意的地方。

    这一章节就说到这里,谢谢大家

    ------------------------------------------------------------------

    点击跳转零基础学python-目录



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Python 规范
    Hql
    Python
    IIS 日志分析
    NHibernate 知识点整理
    微软开放了.NET 4.5.1的源代码
    自定义消息编码绑定实现
    使用自定义绑定
    WCF安全:通过 扩展实现用户名密码认证
    WCF 几种错误
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896713.html
Copyright © 2011-2022 走看看