• iterables/generators/yield


    iterables

    # 当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做iteration:
    >>> mylist = [1,2,3]
    >>> for i in mylist:
            print(i)
    >>> 1
    >>> 2
    >>> 3
    # mylist是可迭代的。当你用列表推导式的时候,你就创建了一个列表,而这个列表也是可迭代的
    >>> mylist = [x*x for x in range(3)]
    >>> for i in mylist:
            print(i)
    >>> 0
    >>> 1
    >>> 4
    所有你可以用在for...in...语句中的都是可迭代的:比如lists,strings,files...因为这些
    可迭代的对象你可以随意的读取所以非常方便易用,但是你必须把它们的值放到内存里,当它们
    有很多值时就会消耗太多的内存。这里最后一句话是重点。
    

    generators

    生成器也是迭代器的一种,但是你只能迭代它们一次,原因很简单,因为它们不是全部存在内存里,
    它们只在要调用的时候在内存里生成:
    >>> mygenerator = (x*x for x in range(3))
    >>> for i in mygenerator:
            print(i)
    >>> 0
    >>> 1
    >>> 4
    生成器和迭代器的区别就是()代替[],还有你不能用for i in mygenerator第二次调用生成器:
    

    yield

    // yield的用法和关键字return差不多,下面的函数将会返回一个生成器
    >>> def createGenerator():
            mylist = range(3)
            for i in mylist:
                yield  i*i
    >>> mygenerator = createGenerator() # 创建生成器
    >>> print(mygenerator)  # mygenerator is an object
    >>> for i in mygenerator:
            print(i)
    >>> 0
    >>> 1
    >>> 4
    当你的函数要返回一个非常大的集合并且你希望只读一次的话,那么它就非常的方便了
    要理解Yield你必须先理解当你调用函数的时候,函数里的代码并没有运行。函数仅仅
    返回生成器对象,这就是它的最微妙之处。
    然后,没当for语句迭代生成器的时候你的代码才会运转。
    当for语句第一次调用函数里返回的生成器对象,函数的代码就开始运作,直到碰到yield
    然后会返回本次循环的第一个返回值,所以下一次调用也将运行一次循环然后返回下一个值
    直到没有值可以返回
    一旦函数运行并且没有碰到yield语句就认为生成器已经为空了。因为有可能是循环结束
    或者没有满足if/else之类的。
    
  • 相关阅读:
    kafka常见问题汇总
    kafka可视化工具kafkatool
    VB.NET DevExpress GirdView 搜素框界面Find Clear按钮转换为自定义中文
    winform DevExpress GridView复制单元格方法
    DevExPress GridView获取单元格坐标和内容
    Winform Log4Net使用(一)(产生yyyyMMdd'.log)便于每天使用记录一眼能看出哪天使用时出错
    winform 判断重复检测,是否开启相同应用程序 和 线程异常捕获
    winfrom Run状态控件刷新办法
    C# winform Panel自定义移动窗口
    C# 控制台CMD辅助类
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/15977682.html
Copyright © 2020-2023  润新知