Python-迭代器与生成器

迭代器与生成器
迭代器

可迭代对象:只要实现了__iter__()方法,并且该方法返回一个迭代器。
迭代器:是实现了__iter__()和__next__()都是迭代器,iter()返回自身,next()返回下一个值,迭代器一定是可迭代对象。
可迭代对象有:

  • 容器类型

  • 打开的文件

  • range()

  • 迭代器作用:懒加载,不会一次性加载全部,从而消耗大量内存,用的时候才会生成
    实现斐波拉契数列迭代器:

#输出斐波拉契数列
class My_Fiboracci():
    def __init__(self):
        self.first = 1
        self.second = 0
        self.temp = 0

    def __iter__(self):
        return self
    def __next__(self):
            self.temp = self.first+self.second
            self.first =self.second
            self.second = self.temp
            return self.temp
for i in My_Fiboracci():
    if i <23:
        print(i)
    else:
        break

运行结果:

1
1
2
3
5
8
13
21
生成器

生成器是特殊的迭代器,为了写迭代器更加简单优雅

1.生成表达式

#生成式表达式
lst = [3,4,5,6,7]
g1 = (x**2 for x in lst)
print(hasattr(g1,'__iter__'))
print(hasattr(g1,'__next__'))
print(g1.__next__())

运行结果:

True
True
9

2.生成器函数

#生成器函数,以yield为关键字
#保留中间算法,下次执行,当调用next时,遇到yield就暂停运行并返回yield后面表达式的值
#当再次调用yield时,会从暂停的地方继续运行,直到遇到下一个yield或生成器结束
def get_content():
    print("start yield....")
    yield 3
    print("second yield....")
    yield 4
    print("end....")

g1 = get_content()
print(hasattr(g1,'__iter__'))
print(hasattr(g1,'__next__'))
print(next(g1))
print(next(g1))
print(next(g1))
print(next(g1))

运行结果:

StopIteration
True
True
start yield....
3
second yield....
4
end....

迭代器,迭代对象,生成器关系图:

hon
StopIteration
True
True
start yield…
3
second yield…
4
end…


迭代器,迭代对象,生成器关系图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf9b296d87b549da996200ef550cf9d9.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值