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,增加了传值的功能



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩猩文学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值