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

Python迭代器 生成器

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

Python迭代器 生成器

迭代器

迭代器指的是迭代取值的工具,迭代是指一个重复的过程,每一次重复都是基于上一次结果而来迭代提供了一种通用的不依赖索引的迭代取值方式。

可迭代对象

可以用for循环遍历的对象都是可迭代对象。

~str,list,tuple,dict,set等都是可迭代对象

~generator(生成器和yield的生成器函数)也是可迭代对象

迭代器

~有内置的__iter__()方法的对象,执行迭代器的__iter__()方法得到的依然是迭代器本身

~有内置的__next__()方法的对象,执行该方法可以不依赖索引取值

问题:可迭代对象一定是迭代器吗 false

1.掌握如何转为迭代器
   1.1 转为迭代器的方法__iter__() iter()
2.迭代器与生成器的取值
   2.1 lis.__next__() next()
3.生成器的运行方式
# 可迭代对象
# 1,包含__iter__方法
# str()
# list()
# int()  # 不是可迭代

# isinstance 来判断是否为可迭代对象
# from collections.abc import Iterable  # 判断是否为可迭代对象
# from collections.abc import Iterator  # 判断迭代器
#
# print(isinstance('abc', Iterable))
# print(isinstance([1, 2, 3], Iterator))


li = [1,2,3,4]
print(type(li))
# lis = li.__iter__()
lis = iter(li)
print(type(lis))
# print(lis[0])#会报错,迭代不能通过下标取值,因为数据不是全部存储在内存里面,只有在调用的时候才会使用
# print(lis.__next__()) #只能顺序取值
print(lis.__next__())
# print(lis.__next__())
# print(lis.__next__())
# print(lis.__next__())#StopIteration
print(next(lis))
生成器

在python中,一边循环一边计算的机制,称为生成器:generator。

为什么会有生成器?

生成器就是在循环的过程中根据算法不断推算出后续的元素,这样就不用创建整个完整的列表,从而节省大量的空间。

生成器表达式

生成器表达式来源于迭代和列表解析的组合,生成器和列表解析类似,但是它使用()而不是[]。

# q = (i for i in range(5))
# print(type(q))
# # print(g[0])# 生成器不能通过下标取值
# print(next(q))


# def yieldtest(num):  # num :20
#     n = 0
#     li = []
#     while n < num:
#         li.append(n)
#         n = n + 1
#     print(li)
#
#
# yieldtest(20)

'''
yield:将函数变成生成器的关键字,将值返回的next(g),直到遇到下一个next(g),会接着上一段代码执行
return :函数执行到return时,就退出了函数
'''

# def yieldtest(num):  # num :20
#     n = 0
#     li = []
#     while n < num:
#         # li.append(n)
#         n = n + 1
#     # print(li)
#         yield n
#
# res = yieldtest(20)
# print(next(res))
# print(next(res))#遇到第二个next(g),会接着上一次的yield下面代码继续执行

def test():
    a1 = yield "hello"
    yield a1

res = test()
print(next(res)) #hello
print(res.send("world")) #world,增加了传值的功能



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

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

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