zoukankan      html  css  js  c++  java
  • python 关键字yield解析

    python 关键字yield解析

    yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。
    yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰

    # eg_v1 建立一个列表,逐项地读取这个列表,那么这个列表就是一个可迭代对象。

    >>> mylist = [1,2,3,4,5]
    >>> for i in mylist:
    ... print i
    ... 
    1
    2
    3
    4
    5
    

      

    使用一个列表生成式来建立一个列表的时候,也是建立了一个可迭代的对象

    >>> mylist = [x * x for x in range(5)]
    >>> for i in mylist:
    ... print i
    ... 
    0
    1
    4
    9
    16

    注:使用 for .. in .. 语法的叫做一个迭代器:列表,字符串,文件等,缺点是内存开销大


    生成器
    生成器是可以迭代的,但是只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据。

    >>> mygenerator = (x * x for x in range(5))
    >>> for i in mygenerator:
    ... print i
    ... 
    0
    1
    4
    9
    16
    

      

    yield关键字
    yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器

    >>> def createGenerator():
    ... mylist = range(5)
    ... for i in mylist:
    ... yield i * i
    ... 
    >>> 
    >>> mygenerator = createGenerator()
    >>> print (mygenerator)
    <generator object createGenerator at 0x7fb6f3fdf820>
    >>> for i in mygenerator:
    ... print i
    ... 
    0
    1
    4
    9
    16
    >>>

    可以理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,使用for进行迭代的时候,执行函数内的代码

  • 相关阅读:
    Unity GeometryShader(从一个线框渲染的例子开始)
    Unity5中的MetaPass
    学习游戏渲染(Shader)的用处
    Shader的学习方法总结
    Esfog_UnityShader教程_溶解效果Dissolve
    【原创翻译】初识Unity中的Compute Shader
    Esfog_UnityShader教程_遮挡描边(实现篇)
    Esfog_UnityShader教程_遮挡描边(原理篇)
    走好脚下的路--写给迷茫的计算机专业在校生
    一款游戏如何诞生
  • 原文地址:https://www.cnblogs.com/xieshengsen/p/6896933.html
Copyright © 2011-2022 走看看