博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成器
阅读量:5274 次
发布时间:2019-06-14

本文共 1532 字,大约阅读时间需要 5 分钟。

  • 定义

通过列表生成式,我们可以直接创建一个列表。但是,收到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在python中,这种一遍循环一遍计算的机制,成为生成器:generator

#列表,占用内存a = [1,2,3,4,5,6,7,8,9,10]#简单的生成器b = [i*2 for i in range(10)]print(b)
列表生成式
c = (i*2 for i in range(10))print(c)
简单生成器

结果:<generator object <genexpr> at 0x0000000001E6FE60>

  • 特性:
  1. 只有在调用的时候才会生成相应的数据
  2. 只记录当前位置
  3. 只有一个_next_()方法
def fib(max):    n,a,b = 0,0,1    while n < max:        #print(b)        yield b  #yield        a,b = b,a+b        '''        a,b = b,a+b相当于        t = (a,a+b)        a = t[0]        b = t[1]           '''        n = n+1    return "feibo"#在生成器里面,这个是错误后显示的内容gen = fib(10)print(gen)print(gen.__next__())print(gen.__next__())print("=========================")print(gen.__next__())print(gen.__next__())print(gen.__next__())print(gen.__next__())print(gen.__next__())print(gen.__next__())
斐波那契

 生成器并行,初步生产模式

 

import timedef consumer(name):    print("%s要去吃包子了"%name)    while True:        baozi = yield        print("%s来了,被【%s】吃掉了"%(baozi,name))def producer(name):    c = consumer("A")#将A传入consumer里面,将之变成了一个生成器    c1 = consumer("B")#将B传入consumer里面,将之变成了一个生成器    c.__next__()#调用生成器,获取信息,到到 baozi    c1.__next__()#调用生成器,获取信息,到到 baozi    print("老子要做包子了")    for i in range(10):        time.sleep(1)        print("做了两个包子")        c.send(i)#将对应i的数据传入到之前跳出yield的baozi里面        c1.send(i)#将对应i的数据传入到之前跳出yield的baozi里面producer("alex")
生成器并行

 

转载于:https://www.cnblogs.com/cheng662540/p/8076096.html

你可能感兴趣的文章
yield语句
查看>>
Html.Partial和Html. RenderPartial用法
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
《弟子规》下的沉思
查看>>
网络流24题 飞行员配对方案问题
查看>>
剑指offer python版 调整数组顺序使奇数位于偶数前面
查看>>
Leader of All Crushing Machines in the Future
查看>>
设置dataGridView单元格颜色、字体、ToolTip、字体颜色
查看>>
wx-charts 微信小程序图表 -- radarChart C# .net .ashx 测试
查看>>
对项目重命名
查看>>
Scrapy框架简介及小项目应用
查看>>
tkinter学习三
查看>>
CentOS自带定时任务crontab
查看>>
基因组拼接中常见的名词解释
查看>>
##CS3动画效果
查看>>
nginx 配置 http重定向到https
查看>>
Linux vi/vim
查看>>
JS 设置复选框的选中与取消选中
查看>>