博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之路《九》 迭代器与生成器
阅读量:4980 次
发布时间:2019-06-12

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

1.生成器

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

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

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

P = (x*x for x in range(10))print(P)

这样我们就构建了一个生成器那么我们打印的结果是什么呢?

at 0x000001FEC5091AF0>

这就是P的结果了 那么当我想打印我要的东西我只需要

print(P.__next__())

有人就要问,我要是想打印第三个怎么办?那没办法只能调用三次了。

1.2使用循环制作一个生成器

1 def shengchengqi(max):2     print('生成器真正在生效')3     b = 04     while b < max:5         b = yield 6         b += 27 8 data = shengchengqi(10)9 print(data.__next__())

如代码所示当我们用循环构建一个生成器的时候只需要使用 yield关键字并且使用一个变量接收即可。

1.3通过yield实现在单线程的情况下实现并发运算的效果

现在我们知道可以根据yield制作一个生成器这里我要借用网上的思路来展示详情请看http://www.cnblogs.com/alex3714/articles/5765046.html

1 def xiaodian(name): 2     print("大家准备吃包子咯") 3     while True: 4         baozi = yield 5         print('包子来咯,%s,被%s吃了' % (baozi, name)) 6  7 def protulr(): 8     c1=xiaodian('booker') 9     c=xiaodian('li')10     c.__next__()11     c1.__next__()12     print('老子要开始做包子了')13     c.send('大肉包')14     c1.send('小笼包')15     c.send('菜包')16     c1.send('woako')

那么这里解释一下啊send的使用方法,send为向生成器内传入值。 并且也会next一下。

 

2.迭代器

总结一句话就是

 

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象

转载于:https://www.cnblogs.com/BookMiki/p/9682857.html

你可能感兴趣的文章
let 与 const 的用法
查看>>
使用HttpClient发送文件流到服务器端
查看>>
python-进程
查看>>
Atom
查看>>
Jenkins-在windows上配置自动化部署(Jenkins+Gitblit)
查看>>
Marvel – 将图像和源文件转换成互动,共享的原型
查看>>
如何给网站瘦身?图文并茂的前端性能优化指南
查看>>
codeforce 6D-6E(dp,线段树)
查看>>
python学习笔记(六)循环
查看>>
[置顶] myEclipse8.5或者eclipse手工安装jd插件(myEclipse8.5或eclipse内直接查看.class文件,jd反编译工具)...
查看>>
MST最小生成树及Prim普鲁姆算法
查看>>
Access连接数据源配置(新手必知)
查看>>
(3)排序之直接插入排序
查看>>
知识图谱技术分享会----有关知识图谱构建的部分关键技术简介及思考
查看>>
TCP/IP、Http、Socket的区别
查看>>
c#数字图像处理算法(最终版)
查看>>
(原创)robotium自学笔记
查看>>
搭建SSI开发框架原理
查看>>
原版的WEB认证客户端,提供源代码,让用户自行编译
查看>>
小程序弹出框
查看>>