吾八哥学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