吾八哥学Python(十六):Python里的迭代器与生成器
Python里
迭代器
上一次输出的结果为下一次输入的初始值,重复的过程称为迭代。迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器有两个基本的方法:iter() 和 next()。内置__iter__方法的,都是可迭代的对象,例如:字符串,列表或元组对象还有集合都可用于创建迭代器。请看如下例子:
import sys list = [1,2,3,4,5,6] it1 = iter(list) print("next(it):",next(it1)) print("for循环读取:") for x in it1: print(x) print("while循环通过next()读取:") it2 = iter(list) while True: try: print(next(it2)) except StopIteration: sys.exit()
以上代码运行结果为:
next(it): 1 for循环读取: 2 3 4 5 6 while循环通过next()读取: 1 2 3 4 5 6
我们需要注意的是:
如果容器中没有更多元素了,则抛出StopIteration异常
迭代器只能往前不会后退。
迭代器的优点和缺点:
优点:
1.提供了一种不依赖下标的迭代方式
2.就跌迭代器本身来说,更节省内存
缺点:
1. 无法获取迭代器对象的长度
2. 不如序列类型取值灵活,是一次性的,只能往后取值,不能往前退
生成器
使用了yield的函数被称为生成器,生成器是一个特殊的迭代器,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
yield的功能:
1.相当于为函数封装好__iter__和__next__
2.return只能返回一次值,函数就终止了,而yield能返回多次值,每次返回都会将函数暂停,下一次next会从上一次暂停的位置继续执行
使用例子如下:
def doTest(len): print("begin...") i = 0 while i < len: yield i print("yield:", i) i+=1 print("end...") x = doTest(5) print(next(x)) print(next(x)) print(next(x))
上面代码输出结果为:
begin... 0 yield: 0 1 yield: 1 2
在Pythton的协程里会用到yield的,yield可以一定程度上实现协程。
本文首发学Python网:http://www.xuepython.wang