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的代码。
     
  • 相关阅读:
    爬虫的基本原理
    爬虫的分类
    gcc编译
    C++字符串总结
    PE文件格式学习笔记
    学习SDR过程中的参考网页
    Linux下源码编译安装遇到的问题
    web | jsp考试复习要点整理
    爬虫 | php封装 | file_get_contents
    re | [NPUCTF2020]EzObfus-Chapter2
  • 原文地址:https://www.cnblogs.com/harelion/p/4856179.html
Copyright © 2011-2022 走看看