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的代码。

时间: 2024-12-20 09:11:43

yield学习的相关文章

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

必读好文推荐: Unity协程(Coroutine)原理深入剖析 Unity协程(Coroutine)原理深入剖析再续 上面的文章说得太透彻,所以这里就记一下自己的学习笔记了. 首先要说明的是,协程并不是线程,协程是运行在主线程中的,是和主线程同步执行的代码,不同的地方是运行的方法可以被yield return在当前帧进行打断,到下一帧后可以继续从被打断的地方继续运行. 下面我们看一个示例,场景中有一个空的GameObject对象,其绑定了下面的脚本: 1 using UnityEngine;

python yield学习

yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数包含yield关键字,这个函数就会变为一个生成器. 生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用. 由于生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值. 基本操作 # 通过`yield`来创建生成器def fun

yield学习笔记

参考:http://www.dabeaz.com/finalgenerator/ from concurrent.futures import ThreadPoolExecutor import time pool = ThreadPoolExecutor(max_workers=8) def func(x, y): time.sleep(5) return x, y def do_func(x, y): result = yield pool.submit(func, x, y) print(

(转载)openstack学习指南

OpenStack Hacker养成指南 朱 荣泽     |     2013. 8. 8 [toc wrapping="right"] 0 阅读指南 希望本文能够解开你心中萦绕已久的心结,假如是死结,请移步到 https://wiki.openstack.org/wiki/Main_Page 学习OpenStack其实就是学习各种Python库的过程. 把OpenStack的设计原则贴在你的墙上. https://wiki.openstack.org/wiki/BasicDesig

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

可空类型 为啥要引入可空类型? 在数据库中,字段是可以为null值的,那么在C#中为了方便的操作数据库的值,微软引入了可空类型. 声明可空类型 我们可以使用两种方法声明一个可空类型: 1 Nullable<int> i = null; 2 int? i = null; 第二行是第一行的简写方法,其中“?”是微软为可空类型提供的一个语法糖. 我们看看可空类型的实现: 1 // Type: System.Nullable`1 2 // Assembly: mscorlib, Version=4.0

转载-如何成为OpenStack工程师

转载地址  http://way4ever.com/?p=349 0 阅读指南 希望本文能够解开你心中萦绕已久的心结,假如是死结,请移步到 https://wiki.openstack.org/wiki/Main_Page 学习OpenStack其实就是学习各种Python库的过程. 把OpenStack的设计原则贴在你的墙上. https://wiki.openstack.org/wiki/BasicDesignTenets 1 OpenStack Hacker 态度:开放.主动.沟通 影响力

2017/9/5的学习内容___通过yield实现在单线程的情况下实现并发运算的效果

之前的学习内容,由于没有申请开通博客,就没有分享,今天想分享一下学习内容:通过yield实现在单线程的情况下实现并发运算的效果 采用的是经典的生产消费者模型 定义了两个函数 Consumer与Producer 关于生成器标志yield : 如果用__next__访问,只是单纯调用yield :如果是send访问,不仅可以访问yield,也可以给yield赋值! 需求:一个人造包子:两个人吃包子: 代码如下: 1 # -*- coding:utf-8 -*- 2 # Author : 何子辰 3

Python学习之路 - yield生成器,迭代器

生成器 把结果保存成生成器的状态,普通的函数中出现yield,就变成生成器. 1.Python 3.3 中 xrange已合并到range. 1 i = range(10) 2 print (i) 3 4 =>range(0, 10) 2. yield 生成器. 1 def func(): 2 print(111) 3 yield 1 4 print(222) 5 yield 2 6 print(333) 7 yield 3 8 return "done" 9 10 k = fu

Python3.4学习 从yield开始

现在在学习Python的3.4,遇到了协程的慨念和yield from语法,大为疑惑,所以写了这篇博客,首先会写yield.yield from.coroutine和gevent,最后就是利用asynaio开发的一系列库了. 2015年08月06日23:52:54了,就写这么多吧,以后持续更新. 不知道CSDN的markdown能不能换css样式... 关键词 yield 在Python 2.7的时候就接触过yield关键词: def foo(m): n = 0 while n <= m: yi