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的代码。
     
  • 相关阅读:
    Linux日常之命令sort
    Linux日常之命令sed
    Linux日常之命令grep
    Linux日常之命令awk
    Linux日常之命令tee
    Linux日常之数据重定向
    Hibernate打印SQL及附加参数
    使用D3 Geo模块画澳大利亚地图
    基于Spring-WS的Restful API的集成测试
    做项目时需要考虑的安全性问题
  • 原文地址:https://www.cnblogs.com/harelion/p/4856179.html
Copyright © 2011-2022 走看看