迭代器与生成器
2019-02-14 本文已影响0人
水果坚果燕麦片
迭代器
什么是迭代器(iter)
迭代器是python的一种容器类型,取了迭代器中的上一个元素才能取下一个元素,而且取了这个元素中,迭代器中的这个元素就不存在了
迭代器的字面量
迭代器没有指定格式的字面量。只有迭代器对象
迭代器作为容器,里面的元素只能通过其他序列转换,或者通过生成器生成
迭代器中的元素可以是任何类型的数据
将字符串转换成迭代器,迭代器中的元素就是字符串中的每个字符
iter1 = iter('hello')
print(iter1)
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
输出的结果如下:
<str_iterator object at 0x0247A830>
h
e
l
l
o
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
for x in iter1:
print(x)
遍历的方法也是一样,但是取过了之后就不再能取到
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)
生成器就是迭代器,迭代器不一定是生成器
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:
import sys
# 定义生成器函数
def fibonacci(n):
a,b,counter = 0,1,0
while True:
if (counter > n):
return
yield a
a,b = b,a+b
counter += 1
f = fibonacci(10) #f是一个迭代器,由生成器返回生产
while True:
try:
print(next(f),end=' ')
except StopIteration:
sys.exit()
结果如下:
0 1 1 2 3 5 8 13 21 34 55