zoukankan      html  css  js  c++  java
  • yield学习

    如果要控制内存占用,最好不要用list来保存中间结果,而是通过iterable对象(range, xrange, generator等)来迭代。
     
    yield 使函数变为generator,返回对象为iterator(可通过for循环遍历)
     
    在一个generator function中,默认会执行到函数完毕,如果有return命令,编译时会直接报错。在同一个函数中,yield与return互斥
    可通过yield控制文件读取。
    yield利用实例fabonacci:
    def fab(max):
        n, a, b = 0, 0, 1
        while n < max:
            a, b = b, a+b
            n += 1
            yield b
     
    >>> from inspect import isgeneratorfunction 
    >>> isgeneratorfunction(fab) 
    True
    >>> import types 
    >>> isinstance(fab, types.GeneratorType) 
    False 
    >>> isinstance(fab(5), types.GeneratorType) 
    True
    >>> from collections import Iterable 
    >>> isinstance(fab, Iterable) 
    False 
    >>> isinstance(fab(5), Iterable) 
    True
     
    定义类的next方法,则根据类实例的当前变量,可通过next方法一直获取下一个值,在空间占用固定的情况下,可获得整个序列。
    这也是generator的实现方式。
     
    每次调用next方法时才会执行一次generator的代码。
     
  • 相关阅读:
    大学的最后时光---我的毕设日记(二)
    大学的最后时光---我的毕设日记(一)
    记公司同事的一次集体活动
    ssh框架基本原理
    plsql基本操作记录
    eclipse快捷键。
    面向对象的特性:封装继承多态
    设置label中的对齐方式
    pixmap和label设置图片自适应大小
    类的继承
  • 原文地址:https://www.cnblogs.com/harelion/p/4856179.html
Copyright © 2011-2022 走看看