栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-迭代器与生成器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号