迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束。
迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
- 字符串、列表或元祖对象都可用于创建迭代器:
1 list = [1,2,3,4] 2 it = iter(list) #创建迭代器对象 3 print(next(it)) #输出迭代器的下一个元素 1 4 print(next(it)) #2 5 print(next(it)) #3 6 print(next(it)) #4
- 迭代器对象可以使用常规for语句进行遍历:
1 list = [1,2,3,4] 2 it = iter(list) #创建迭代器 3 for x in it: 4 print(x,end=' ') #1 2 3 4
-
也可以使用next()函数:
1 import sys 2 3 list = [1,2,3,4] 4 it = iter(list) #创建迭代器对象 5 6 while True: 7 try: 8 print(next(it),end=' ') 9 except StopIteration: 10 sys.exit() 11 # 1 2 3 4
生成器
在python中,使用了yield的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单的理解:生成器就是迭代器。
在调用生成器运行的过程中,每次遇到yield时,函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时,从当前位置继续执行。
调用一个生成器函数,返回的是一个迭代器对象。
- 字符串、列表或元祖对象都可用于创建迭代器:
1 import sys 2 3 def fibonacci(n): #生成器函数--斐波那契 4 a,b,counter = 0,1,0 5 while True: 6 if (counter > n): 7 return #作用:如果计数大于n,则结束while循环 8 yield a 9 a,b = b,a+b 10 counter += 1 11 12 f = fibonacci(10) #f 是一个迭代器,由生成器函数返回生成 13 14 while True: 15 try: 16 print(next(f),end=' ') 17 except StopIteration: 18 sys.exit()