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

python迭代器与生成器

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

python迭代器与生成器

文章目录

  • python推导式
  • python可迭代对象(iterable)
  • 迭代器(iterator)
  • 生成器(genatator)
  • 总结

一、python推导式

1、列表推导式

a = [1,2,3,4,5,6,7]
b = [x for x in a if x % 2 == 1]
print(b)

2、字典推导式

d1 = {"a":1, "b":2}
d2 = {v:k for k,v in d1.items()}
print(d2)

3、集合推导式:和列表推导式差不多,只不过使用{},自动去重

a = [1,-1,2,1]
b = {i*i for i in a if i in a}
print(b)
二、python可迭代对象

能被for循环的都是可迭代对象

实现了__iter__方法,并且该方法返回一个迭代器的对象

​
lst = ["x","y",1,2,3]
print(dir(lst))

​
三、迭代器(iterator)

实现了__iter__和__next__方法的都叫迭代器;

__iter__方法返回自身;

__next__方法返回下一个值。

在for循环中,for先调用可迭代对象__iter__方法,返回一个迭代器,然后再对迭代器调用__next__方法,直到最后一个退出。

迭代器是懒加载,惰性求值,需要的时候在生成。

四、生成器(genatator)

生成器它不需要手动实现__iter__和__next__方法;

是迭代器更优雅的写法。

生成器有两个写法:a生成器表达式  b生成器函数。

a生成器表达式:

生成器表达式类似于列表推导式,只不过使用()。

例:

result = (x for x in range(1,31) if x % 3 == 0)
print(result)
print(dir(result))

b生成器函数:

包含了yield关键字的函数就叫做生成器函数

例:

def get_content():
    x = 2
    yield x
    y = 3
    yield y
    z = 4
    yield z

g = get_content()
print(g)
print(dir(g))
#第一次执行next的时候,遇到yield就退出,并且返回yield后面携带的参数,还会记录之前的位置
print(next(g))
#第二次执行的时候就会从上一次执行的地方继续执行
print(next(g))
print(next(g))

例题:

用生成器函数实现斐波拉契数列

def func1():
    o, t = 0, 1
    while 1:
        yield t
        o, t = t, t + o
u = func1()
for i in range(1,8):
    print(next(u))

​​

yield与return的比较

              * 相同点:都可以返回一个值,值的类型和个数没有限制

              * 不同点:yield返回的值可以保存返回值的状态,可以多次返回

                              Return返回值只能返回一次,函数就会退出

五、总结

迭代对象、迭代器、生成器的区别

  1. 可直接作用于for循环的对象称为可迭代对象,可迭代对象实现了__iter__()方法。
  2. 迭代器则是实现了__iter__()和__next__()方法的对象,可以显示地获取下一个元素。
  3. 生成器是特殊的迭代器,生成器返回一个迭代器,生成器中包含yield关键字,相当于一个断点,执行到此返回一个值后暂停,从而实现next取值。

​​​​​​​

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

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

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