迭代器与生成器

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 
上一篇下一篇

猜你喜欢

热点阅读