如果要控制内存占用,最好不要用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的代码。
 

yield学习的更多相关文章

  1. yield学习续:yield return迭代块在Unity3D中的应用——协程

    必读好文推荐: Unity协程(Coroutine)原理深入剖析 Unity协程(Coroutine)原理深入剖析再续 上面的文章说得太透彻,所以这里就记一下自己的学习笔记了. 首先要说明的是,协程并 ...

  2. 爬楼梯问题,yield学习总结

    问题起源: 一个人爬楼梯,一步可以迈一级,二级,如果楼梯有N级,要求编写程序,求总共有多少种走法. 简单的一个递归思想,只要爬到了N-1层,或者爬到N-2层,则认定下一步只有一种走法.所以再去找寻N- ...

  3. yield 学习笔记

    第三部分(先看) 先讲 iterator 和 iterable 可迭代对象 (Iterable) 是实现了__iter__()方法的对象, 通过调用iter()方法可以获得一个迭代器 (Iterato ...

  4. yield学习笔记

    参考:http://www.dabeaz.com/finalgenerator/ from concurrent.futures import ThreadPoolExecutor import ti ...

  5. yield 学习

    什么是生成器 生成器是可以迭代的,但是你只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据. yield 理解 通常的for...in...循环中,in后面是一个数组,这个数组就是 ...

  6. python yield学习

    yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数包 ...

  7. C#学习笔记(六):可空类型、匿名方法和迭代器

    可空类型 为啥要引入可空类型? 在数据库中,字段是可以为null值的,那么在C#中为了方便的操作数据库的值,微软引入了可空类型. 声明可空类型 我们可以使用两种方法声明一个可空类型: Nullable ...

  8. python学习二三事儿(转,整)

    Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大小 ...

  9. OpenStack Hacker养成指南

    0 阅读指南 希望本文能够解开你心中萦绕已久的心结,假如是死结,请移步到 https://wiki.openstack.org/wiki/Main_Page 学习OpenStack其实就是学习各种Py ...

随机推荐

  1. vector erase

    vector::erase 从指定容器删除指定的元素 两个重载: iterator erase (iterator position);删除指定位置position的元素,并返回删除元素的下一个元素的 ...

  2. MS12-020蓝屏攻击

    MS12-020远程桌面协议RDP拒绝访问漏洞 条件:受害者必须开放RDP协议 开放了3389端口 或者端口改了,知道对方RDP开放的对应端口. 过程:MSF利用 MSF显示为seems down说明 ...

  3. 跟着大神学Mongo,Mongodb主从复制本机简单操作总结

    原文链接:http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html 本机安装MongoDB不在介绍,本文Mongo小菜鸟 ...

  4. bagging 和boosting的概念和区别

    1.先弄清楚模型融合中的投票的概念 分为软投票和硬投票,硬投票就是几个模型预测的哪一类最多,最终模型就预测那一类,在投票相同的情况下,投票结果会按照分类器的排序选择排在第一个的分类器结果.但硬投票有个 ...

  5. iOS:UICollectionView流式布局及其在该布局上的扩展的线式布局

    UICollectionViewFlowLayout是苹果公司做好的一种单元格布局方式,它约束item的排列规则是:从左到右依次排列,如果右边不够放下,就换一行重复上面的方式排放,,,,,   常用的 ...

  6. Spring注解配置(1)——@Autowired

    @Autowired 注释,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方法.在使用@Autowired之前,我们对一个b ...

  7. PHPStorm等编辑器debug调试(包括使用postman、soapUI)

    很多人在开发的时候,需要进行断点调试,但是很多人配置了很多,还是调试不了,其实是不需要这么麻烦的. 注意:PHPStorm等编辑器debug的配置不用进行任何配置,默认配置就好 实质上,断点调试的时候 ...

  8. Archlinux下安装微信小程序开发工具

    由于微信小程序没有Linux版本,所以需要用wine来跑 一.安装wine sudo pacman -S wine 二.安装nwjs-sdk 微信开发工具包基于nwjs-sdk #没有wget就先安装 ...

  9. Redis(九):Redis的Java客户端Jedis

    Redis的Java客户端Jedis导航目录: 安装JDK 安装Eclipse Jedis所需要的Jar包 Jedis常用操作 JedisPool 安装JDK tar -zxvf jdk-7u67-l ...

  10. OpenCV-Python 视频读取

    import numpy as np import cv2 # 读取视频文件 cap = cv2.VideoCapture('./law.mp4') # 或者电影每秒的帧数 fps = cap.get ...