迭代器
2016-02-12 17:19
239 查看
''' 迭代器从对象的第一个元素一直到最后,只能从前往后退, 循环到那一次,就只能访问之后的数据。 迭代器最大的优点,不需要准备事先准备的元素 迭代的元素,仅仅可以在需要迭代的时候使用, 特别适合用于对读大文件 cat/vi,cat使用迭代器 vi打开大文件的时候需要很长时间,cat不需要 cat就是通过迭代的形式来读文件 读一行显示一行,这样就比较省内存。10个g的文件,再循环读取下一行。 迭代器的特点 不能随机访问某个值, 访问到一半的时候是不能回退的 便于循环比较大的数据 迭代器里面没有其他方法,仅仅有一个next方法 生成器 这个函数返回的结果就是一个生成器 ''' names=iter([1,2,3]) print(names) print(names.__next__()) print(names.__next__()) print(names.__next__()) ''' f=open('test.log','w') f.write("sdfdfdf") for line in f: print(line) f.close() 这个相当于迭代器的功能这种方法读取文件会 比较节省内存空间,读取较快 ''' def cash_money(amount): while amount >0 : amount-=100 yield 100 print("取钱") a=cash_money(500) print(type(cash_money(100))) print(a.__next__()) print('来吧') print(a.__next__()) print(a.__next__()) ''' print(a.__next__()) print(a.__next__()) print(a.__next__()) print(a.__next__()) print(a.__next__()) ''' ''' 第六次就会出现失败 程序多是串行,按照以前的方法,如果卡住,需要等待 在这里存在一个异步的需求。 生成器可以保存上一次运行的结果 可以在运行print('来吧')后再运行其他的 正常的程序对于循环是不可以跳出的 yield不但可以返回值,还可以接受一个值 在底层执行的过程中依然还是串行的。 ''' def consumenr(name): while True: print('准备吃包子啦') boazi=yield print("包子被吃啦") print(name) print(boazi) def shengchan(name): c=consumenr('a') c1=consumenr('b') c.__next__() c1.__next__() print('老子开始做包子') for i in range(10): print("做啦两个包子",i) c.send(i) c1.send(i) shengchan('alex')
C:\Python34\python.exe "C:/Users/Admin/PycharmProjects/untitled1/第5 天/迭代器.py"
<list_iterator object at 0x0228F670>
1
2
3
<class 'generator'>
100
来吧
取钱
100
取钱
100
准备吃包子啦
准备吃包子啦
老子开始做包子
做啦两个包子 0
包子被吃啦
a
0
准备吃包子啦
包子被吃啦
b
0
准备吃包子啦
做啦两个包子 1
包子被吃啦
a
1
准备吃包子啦
包子被吃啦
b
1
准备吃包子啦
做啦两个包子 2
包子被吃啦
a
2
准备吃包子啦
包子被吃啦
b
2
准备吃包子啦
做啦两个包子 3
包子被吃啦
a
3
准备吃包子啦
包子被吃啦
b
3
准备吃包子啦
做啦两个包子 4
包子被吃啦
a
4
准备吃包子啦
包子被吃啦
b
4
准备吃包子啦
做啦两个包子 5
包子被吃啦
a
5
准备吃包子啦
包子被吃啦
b
5
准备吃包子啦
做啦两个包子 6
包子被吃啦
a
6
准备吃包子啦
包子被吃啦
b
6
准备吃包子啦
做啦两个包子 7
包子被吃啦
a
7
准备吃包子啦
包子被吃啦
b
7
准备吃包子啦
做啦两个包子 8
包子被吃啦
a
8
准备吃包子啦
包子被吃啦
b
8
准备吃包子啦
做啦两个包子 9
包子被吃啦
a
9
准备吃包子啦
包子被吃啦
b
9
准备吃包子啦Process finished with exit code 0
相关文章推荐
- 后缀平衡树 nbut1653 String in the tree
- ElasticSearch初步学习,创建索引(入门一)
- python中List添加元素的几种方法
- hdu--2089(打表)
- 类装载器读取properties资源文件
- macbook安装mysql
- 51 nod 1130 N的阶乘的长度 V2(斯特林近似)
- nyoj301 递推求值(矩阵快速幂)
- 【设计模式】2、生成器模式(建造者模式)
- c++ string 用法总结
- QT的Meta-Object系统
- 需要经常看的故事
- vs2013连接mysql mysql_init未定义
- Android TV Studuy1-2
- ATL与COM之间的关系、ATL的特点与基本使用方法
- Xcode7中你一定要知道的炸裂调试神技
- android:从另外一个activity中返回数据
- [LeetCode]Gas Station
- 从初识Linux到离不开系列(四)循序渐进
- 相当重要---部署OGG对Oracle Database 补丁的要求