python基础之迭代器和生成器
2016-06-13 14:20
721 查看
迭代器 iter()
迭代器是访问集合中元素的一种方式,迭代器 object 从集合中的第一个元素开始访问,知道所有的元素被访问完成.所以迭代器的特点是:只能往前,不能后退
迭代器的优点:不需要提前准备整个迭代器中的所有元素,仅仅迭代到某个元素时才计算该元素,而之前或者之后,元素可以不存在或者销毁.因为这个特点,迭代器特别适合遍历文件比较大或者无限的集合.
总结下迭代器 iter()的特点吧:
访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
不能随机访问集合中的某个值 ,只能从头到尾依次访问
访问到一半时不能往回退
便于循环比较大的数据集合,节省内存
**迭代器是用__next__()来取值的,来看个例子吧:
li=[1,2,3,4,56,78] a=iter(li) print(a.__next__()) print(a.__next__()) print(a.__next__()) print(a.__next__()) print(a.__next__()) print(a.__next__()) #取值到最后一个元素787 print(a.__next__())
输出:
1 2 3 4 56 78 #开始报错 Traceback (most recent call last): File "/Users/shane/PycharmProjects/Py_study/Base/S5/iter_test.py", line 14, in <module> print(a.__next__()) StopIteration
生成器generator
一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator);如果函数中包含yield语法,那这个函数就会变成生成器yield是个什么鬼?yield 其实和函数中的 return 一样,一样的是都会返回定义好的值,但不同的是,return 是退出函数,yield 只是暂停函数执行,等待下一次迭代器取值
我们来看个例子:
def func(): print(111) yield 1 print(222) yield 2 print(333) yield 3 ret=func() r1=ret.__next__() print(r1) #如果没有 print,只会返回111
out:
111 1
一个典型的生成器的取值方式:
def func(): print(111) yield 1 print(222) yield 2 print(333) yield 3 ret=func() r1=ret.__next__() print(r1) r2=ret.__next__() print(r2) r3=ret.__next__() print(r3) r4=ret.__next__() #如果没有 r4就不会报错,因为已经没值可取了 print(r4)
out:
Traceback (most recent call last):
File "/Users/shane/PycharmProjects/Py_study/Base/S5/geno.py", line 21, in <module>
r4=ret.__next__()
StopIteration
111 1
222
2
333
3
进程已结束,退出代码1
来看一个比较完整一点的生成器和迭代器吧:
def myrange(args): start=0 while True: if start > args: return else: yield start start+=1 res=myrange(3) ret=res.__next__() print(ret) ret=res.__next__() print(ret) ret=res.__next__() print(ret) ret=res.__next__() print(ret) ret=res.__next__() print(ret)
相关文章推荐
- python 自定义包并import自己的包
- 【正则表达式】pyahocorasick介绍
- Python记录-Pip安装
- 用Python实现数字密码组合的总数计算
- python基础之字符串格式化
- 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
- python实现爬取千万淘宝商品的方法
- Python使用Scrapy爬取妹子图
- python模块paramiko的上传下载和远程执行命令方法
- Python实现爬取知乎神回复简单爬虫代码分享
- python爬取网站数据保存使用的方法
- Python学习笔记(一)--Python基础知识:变量、数据类型、模块与字符串
- Python len()函数
- QUANTAXIS
- Python中的Map/Reduce
- python 函数
- Python 去剑式
- python study 2
- python解释器
- Python中引用自定义模块